Python函數/Lambda/nested function/decorator/kwargs:全面教程

目錄

  1. 函數簡介
  2. 基本函數語法
  3. 函數參數
  4. 返回值
  5. 高級函數概念
  6. 列表推導式與Lambda函數
  7. 實用示例

函數簡介

函數是可重用的代碼塊,用于執行特定任務。它們有助于組織代碼,促進復用,并使程序更易于維護。可以將函數視為程序中的小型程序。

基本函數語法

在Python中定義函數的基本語法如下:

def function_name(parameters):# 函數體# 要執行的代碼return value  # 可選

示例:

def greet(name):return f"Hello, {name}!"# 調用函數
message = greet("Alice")
print(message)  # 輸出: Hello, Alice!

函數參數

默認參數

def greet(name, greeting="Hello"):return f"{greeting}, {name}!"print(greet("Bob"))          # 輸出: Hello, Bob!
print(greet("Bob", "Hi"))    # 輸出: Hi, Bob!

位置參數與關鍵字參數

def create_profile(name, age, occupation):return f"Name: {name}, Age: {age}, Occupation: {occupation}"# 使用位置參數
print(create_profile("Alice", 30, "Engineer"))# 使用關鍵字參數
print(create_profile(age=30, name="Alice", occupation="Engineer"))

*args 和 **kwargs

def print_all(*args, **kwargs):# 打印位置參數for arg in args:print(f"位置參數: {arg}")# 打印關鍵字參數for key, value in kwargs.items():print(f"關鍵字參數: {key} = {value}")print_all(1, 2, 3, name="Alice", job="Developer")

返回值

函數可以返回單個值、多個值,或什么都不返回(默認返回None)。

# 多個返回值
def get_coordinates():x = 10y = 20return x, y# 返回值為元組
gx_coord, y_coord = get_coordinates()
print(f"X: {x_coord}, Y: {y_coord}")# 提前返回
def check_number(n):if n < 0:return "負數"elif n > 0:return "正數"return "零"

高級函數概念

嵌套函數

def outer_function(x):def inner_function(y):return x + yreturn inner_function# 創建閉包
add_five = outer_function(5)
print(add_five(3))  # 輸出: 8

裝飾器

def timer_decorator(func):from time import timedef wrapper(*args, **kwargs):start = time()result = func(*args, **kwargs)end = time()print(f"函數 {func.__name__} 用時 {end - start:.2f} 秒")return resultreturn wrapper@timer_decorator
def slow_function():import timetime.sleep(1)return "完成!"slow_function()

列表推導式與Lambda函數

列表推導式

列表推導式提供了一種基于現有序列創建新列表的簡潔方式。

# 基本列表推導式
squares = [x**2 for x in range(10)]
print(squares)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]# 帶條件的列表推導式
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares)  # [0, 4, 16, 36, 64]# 嵌套列表推導式
matrix = [[i+j for j in range(3)] for i in range(3)]
print(matrix)  # [[0, 1, 2], [1, 2, 3], [2, 3, 4]]

Lambda函數

Lambda函數是可以內聯定義的小型匿名函數。

# 基本lambda函數
square = lambda x: x**2
print(square(5))  # 25# 多參數lambda
add = lambda x, y: x + y
print(add(3, 4))  # 7# lambda結合列表推導和map
numbers = [1, 2, 3, 4, 5]
doubled = list(map(lambda x: x*2, numbers))
print(doubled)  # [2, 4, 6, 8, 10]

實用示例

數據處理函數

def process_data(data, filters=None, transform=None):"""使用可選的過濾和轉換處理數據列表。參數:data: 要處理的值列表filters: 要應用的過濾函數列表transform: 應用于過濾后數據的轉換函數"""result = data# 如果有過濾器則應用if filters:for filter_func in filters:result = [item for item in result if filter_func(item)]# 如果有轉換則應用if transform:result = [transform(item) for item in result]return result# 示例用法
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
is_even = lambda x: x % 2 == 0
is_greater_than_five = lambda x: x > 5
double = lambda x: x * 2# 使用過濾和轉換處理數據
result = process_data(numbers,filters=[is_even, is_greater_than_five],transform=double
)
print(result)  # [12, 16, 20]

函數中的錯誤處理

def safe_divide(a, b):"""安全地進行除法運算并處理錯誤。"""try:result = a / bexcept ZeroDivisionError:print("錯誤: 除數為零!")return Noneexcept TypeError:print("錯誤: 除法類型無效!")return Noneelse:return resultfinally:print("嘗試了除法操作")# 示例用法
print(safe_divide(10, 2))    # 5.0
print(safe_divide(10, 0))    # None(帶錯誤信息)
print(safe_divide(10, "2"))  # None(帶錯誤信息)

生成器函數

def fibonacci_generator(n):"""生成n個斐波那契數。"""a, b = 0, 1count = 0while count < n:yield aa, b = b, a + bcount += 1# 使用生成器
fib = fibonacci_generator(10)
fibonacci_list = list(fib)
print(fibonacci_list)  # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

本教程涵蓋了Python函數的基礎和高級概念。通過修改示例和編寫自己的函數來練習這些概念。記住,函數是組織代碼、提高可維護性和復用性的強大工具。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85661.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85661.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85661.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

UG NX二次開發(C++)-創建草圖(基于平面、X軸和參考點)

文章目錄 1、前言2、在UG NX中的操作3、代碼實現3.1 添加頭文件3.2 在項目中聲明一個創建草圖的函數3.3 創建草圖函數的實現代碼3.4 函數調用3.5 實現效果1、前言 作為一款大型的CAD/CAM軟件,UG NX在建模中草圖的作用非常重要,功能也非常強大,所以在UG NX中學會草圖的二次開…

計算機視覺課程筆記-機器學習中典型的有監督與無監督學習方法的詳細分類、標簽空間性質、解釋說明,并以表格形式進行總結

? 一、有監督學習&#xff08;Supervised Learning&#xff09; 定義&#xff1a;有監督學習中&#xff0c;模型訓練依賴于已標注的樣本&#xff0c;即輸入和輸出&#xff08;標簽&#xff09;成對出現。 標簽空間可能是&#xff1a; 離散型&#xff08;Discrete&#xff09…

HTTPS加密原理

一、什么是HTTPS&#xff1f; 1.1 https是在http協議上加了一層加密解密層 如圖&#xff1a; https協議就是在http協議的基礎上經過一層加密解密層發送&#xff0c;然后接收端同樣需要經過加密解密層才能獲取到發送過來的數據&#xff0c;這樣就可以保證數據傳輸的安全性&…

無人機測量風速的思路

無人機測量風速主要依靠兩種思路&#xff1a;直接測量和間接測量&#xff08;估算&#xff09;。具體方法取決于無人機的類型、搭載的傳感器以及應用場景。 以下是主要的測量方法&#xff1a; 直接測量法&#xff08;使用氣象傳感器&#xff09;&#xff1a; 原理&#xff1a;…

24. 開發者常用工具:抓包,弱網模擬,元素檢查

打開網頁F12進入開發者頁面。 ctrl shift n進入無痕模式&#xff0c;不會自動清理cookie&#xff0c;便于保持登陸狀態 本文介紹瀏覽器開發者工具中三個常用功能&#xff1a;抓包并導入 Postman、模擬弱網環境、檢查頁面元素與樣式。可用于前端調試、接口分析、頁面優化等場景…

將 Burp Suite 的請求復制到 Postman

將 Burp Suite 的請求復制到 Postman 的步驟如下&#xff1a; 方法 1&#xff1a;直接復制原始請求&#xff08;推薦&#xff09; 在 Burp 中捕獲請求 在 Proxy → HTTP history 或 Target → Site map 中找到目標請求。右鍵請求 → &#xff08;Copy&#xff09; → Copy as c…

MySQL RC隔離級別驚現間隙鎖:是bug嗎?

在MySQL的默認事務隔離級別——讀已提交&#xff08;Read Committed, RC&#xff09;中&#xff0c;開發者普遍認為不會出現間隙鎖&#xff08;Gap Lock&#xff09;。這一認知源于RC級別的設計原則&#xff1a;僅通過行鎖確保已提交數據的可見性&#xff0c;而將幻讀問題交由應…

恢復MacOS 26系統后臺的動作命令

1、終端 輸入 sudo mkdir -p /Library/Preferences/FeatureFlags/Domain回車后輸入mac解鎖密碼。 2、輸入強制關閉命令 sudo defaults write /Library/Preferences/FeatureFlags/Domain/SpotlightUI.plist SpotlightPlus -dict Enabled -bool false它會“強制關閉 Spotlight…

01-JS資料

JS數據類型 var str abc; var num 123; var bool true; var und undefined; var n null; var arr[x,y,z]; var obj {}; var fun function() {}; console.log(typeof str); //string console.log(typeof num); //number console.log(typeof bool); //boolean consol…

學習日記-day34-6.20

知識點&#xff1a; 1.快速入門 知識點 核心內容 重點 IOC容器創建 通過ClassPathXmlApplicationContext加載XML配置文件創建容器&#xff0c;關聯beans.xml 容器與配置文件的綁定關系&#xff08;多配置文件支持&#xff09; Bean獲取方式 1. getBean(String id)返回…

如何使用 neptune.ai 優化模型訓練期間的 GPU 使用率

GPU 可以大大加速深度學習模型的訓練&#xff0c;因為它們專門用于執行神經網絡核心的張量運算。 由于 GPU 是昂貴的資源&#xff0c;因此充分利用它們至關重要。GPU 使用率、內存利用率和功耗等指標可以洞悉資源利用率及其改進潛力。提高 GPU 使用率的策略包括混合精度訓練、優…

騰訊混元3D制作簡單模型教程-1

騰訊混元3D制作簡單模型的零門檻教程,涵蓋新手快速入門與進階操作,結合官方工具特性及行業實踐,分為兩個核心板塊: ?? 一、新手零門檻:5分鐘生成可打印模型(適合完全小白) 通過騰訊元寶APP的“3D角色夢工廠”功能,無需任何建模基礎: 上傳照片 打開騰訊元寶APP → …

一個庫,比如kott_tinymce ,想把的依賴庫從kotti升級到kotti2 ,請問我是不是查找替換,把所有的kotti字符替換成kotti2就行了?

一個庫&#xff0c;比如kott_tinymce ,想把的依賴庫從kotti升級到kotti2 &#xff0c;請問我是不是查找替換&#xff0c;把所有的kotti字符替換成kotti2就行了&#xff1f; kotti和kotti2的包結構、模塊路徑、接口完全一樣&#xff0c;除了import kotti 變成kotti2 如果 kotti…

企業實踐 | 銀河麒麟KylinOS-V10(SP3)高級服務器操作系統基礎安裝指南

前言&#xff1a;國產操作系統的崛起與實踐背景 在國產化浪潮與信息技術自主可控的大背景下&#xff0c;銀河麒麟操作系統作為國產操作系統的代表之一&#xff0c;正逐步成為企業級應用的重要選擇。本文將詳細介紹銀河麒麟高級服務器操作系統V10 SP3版本的基礎知識與安裝實踐&…

Ubuntu 一鍵安裝 ROS

Ubuntu 一鍵安裝 ROS 安裝命令如下&#xff1a; wget http://fishros.com/install -O fishros && . fishros 指令執行后&#xff0c;顯示log如下圖&#xff1a; 之后根據不同的系統安裝對應的ros版本即可。

深度學習——基于卷積神經網絡實現食物圖像分類【4】(使用最優模型)

文件目錄 引言一、環境準備二、數據預處理訓練集預處理說明&#xff1a;驗證集預處理說明&#xff1a; 三、自定義數據集類四、設備選擇五、CNN模型構建六、模型加載與評估1. 加載預訓練模型2. 準備測試數據3. 測試函數4. 計算準確率 七、完整代碼八、總結 引言 本文將詳細介紹…

C++基礎算法————并查集

C++并查集詳解與實戰指南 一、引言 并查集(Union-Find)是一種高效的數據結構,用于處理一些不相交集合的合并與查詢問題。它在圖論、社交網絡、網絡連通性等領域有廣泛的應用。并查集的核心思想是通過一個數組來記錄每個元素的父節點,從而將元素組織成若干棵樹,每棵樹代表…

系統性能優化的關鍵手段

系統性能的提升方向 服務器并發處理能力&#xff1a;通過優化內存管理策略、選擇合適的連接模式&#xff08;長連接或短連接&#xff09;、改進 I/O 模型&#xff08;如 epoll、IOCP&#xff09;、以及采用高效的服務器并發策略&#xff08;如多線程、事件驅動等&#xff09;&a…

httpclient實現http連接池

HTTP連接池是一種優化網絡通信性能的技術&#xff0c;通過復用已建立的TCP連接減少重復握手開銷&#xff0c;提升資源利用率。以下是關鍵要點&#xff1a; 核心原理與優勢 ?連接復用機制? 維護活躍連接隊列&#xff0c;避免每次請求重復TCP三次握手/SSL協商&#xff0c;降低…

廣義焦點丟失:學習用于密集目標檢測的合格和分布式邊界盒之GFL論文閱讀

摘要 一階段檢測器通常將目標檢測形式化為密集的分類與定位(即邊界框回歸)問題。分類部分通常使用 Focal Loss 進行優化,而邊界框位置則在狄拉克δ分布下進行學習。最近,一階段檢測器的發展趨勢是引入獨立的預測分支來估計定位質量,所預測的質量可以輔助分類,從而提升檢…