最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文掌握Python函數(shù)進階:參數(shù)類型與返回值

 更新時間:2026年05月14日 10:57:33   作者:zzwq.  
本文介紹了Python函數(shù)的五種參數(shù)類型,包括位置參數(shù)、默認參數(shù)、可變位置參數(shù)、關鍵字參數(shù)和可變關鍵字參數(shù),以及它們的應用場景和傳遞細節(jié),本文給大家介紹的非常詳細,感興趣的朋友一起看看吧

一、函數(shù)參數(shù)的五種類型

Python 函數(shù)的參數(shù)分為五類,按聲明順序依次為:

1. 位置參數(shù)(Positional Arguments)
2. 默認參數(shù)(Default Arguments)
3. 可變位置參數(shù)(*args)
4. 關鍵字參數(shù)(Keyword Arguments)
5. 可變關鍵字參數(shù)(**kwargs)

1.1 位置參數(shù)(必傳參數(shù))

位置參數(shù)是最常見的參數(shù)形式,調用時必須按定義順序傳遞,且數(shù)量必須匹配。

python
def greet(name, message):
? ? print(f"{message}, {name}!")
greet("Alice", "Hello") ? # Hello, Alice!
greet("Bob") ? ? ? ? ? ? ?# TypeError: missing 1 required positional argument

1.2 默認參數(shù)

在定義時給參數(shù)賦予默認值,調用時可以不傳遞該參數(shù)。默認參數(shù)必須放在位置參數(shù)之后。

python
def greet(name, message="Hello"):
? ? print(f"{message}, {name}!")
greet("Alice") ? ? ? ? ? # Hello, Alice!
greet("Bob", "Hi") ? ? ? # Hi, Bob!

注意:默認參數(shù)在函數(shù)定義時計算,且只計算一次。如果默認參數(shù)是可變對象(如列表、字典),多次調用會共享該對象。

python
def add_item(item, lst=[]): ? # 不推薦
? ? lst.append(item)
? ? return lst
print(add_item(1)) ? # [1]
print(add_item(2)) ? # [1, 2]  共享了同一個列表!
# 推薦寫法
def add_item(item, lst=None):
? ? if lst is None:
? ? ? ? lst = []
? ? lst.append(item)
? ? return lst

1.3 可變位置參數(shù)(*args)

*args用于接收任意數(shù)量的位置參數(shù),并將它們打包成一個元組。args是約定名稱,可以改為其他名字,但*必不可少。

python
def sum_all(*args):
? ? return sum(args)
print(sum_all(1, 2, 3, 4)) ? # 10
print(sum_all()) ? ? ? ? ? ? # 0

應用場景:當不確定傳入多少個參數(shù)時使用,如數(shù)學計算、裝飾器等。

1.4 關鍵字參數(shù)

調用時使用 key=value形式傳遞的參數(shù),可以不按順序。但必須在所有位置參數(shù)之后傳遞。

python
def describe_person(name, age, city):
? ? print(f"{name} is {age} years old and lives in {city}.")
describe_person("Alice", city="New York", age=25) ? # 合法

1.5 可變關鍵字參數(shù)(**kwargs)

**kwargs用于接收任意數(shù)量的關鍵字參數(shù),并將它們打包成一個字典。kwargs是約定名稱,**必不可少。

python
def print_info(**kwargs):
? ? for key, value in kwargs.items():
? ? ? ? print(f"{key}: {value}")
print_info(name="Alice", age=25, city="New York")

1.6 參數(shù)組合順序

在函數(shù)定義中,參數(shù)必須按以下順序聲明:

位置參數(shù) → 默認參數(shù) → *args → 關鍵字參數(shù)(僅限Python 3) → **kwargs
示例:

python
def complex_func(a, b=1, *args, c, d=2, **kwargs):
? ? print(f"a={a}, b=, args={args}, c={c}, d=wppm3vysvbp, kwargs={kwargs}")
complex_func(10, 20, 30, 40, c=50, d=60, e=70, f=80)
# a=10, b=20, args=(30, 40), c=50, d=60, kwargs={'e': 70, 'f': 80}

二、參數(shù)傳遞的細節(jié)

2.1 傳值還是傳引用?

Python 的參數(shù)傳遞是對象引用傳遞。簡單說:如果傳入的是不可變對象(如整數(shù)、字符串),函數(shù)內部修改會創(chuàng)建新對象,不影響外部;如果傳入的是可變對象(如列表、字典),函數(shù)內部修改會影響外部。

python
def modify(x, lst):
? ? x += 1 ? ? ? ? ?# 不可變對象,x指向新對象
? ? lst.append(4) ? # 可變對象,原列表被修改
a = 10
b = [1,2,3]
modify(a, b)
print(a) ? ?# 10
print(b) ? ?# [1,2,3,4]

2.2 使用 * 和 ** 解包參數(shù)

在調用函數(shù)時,可以用 * 解包列表、元組為位置參數(shù),用 **解包字典為關鍵字參數(shù)。

python
def add(a, b, c):
? ? return a + b + c
nums = [1, 2, 3]
print(add(*nums)) ? ? ? ? ?# 6
kwargs = {'a': 10, 'b': 20, 'c': 30}
print(add(**kwargs)) ? ? ? # 60

三、函數(shù)返回值詳解

3.1 單個返回值

函數(shù)可以使用return返回任意類型的值。如果沒有return或只有return,默認返回None。

python
def square(x):
? ? return x ** 2
result = square(5) ? # 25

3.2 多個返回值

Python 函數(shù)可以返回多個值,實際上返回的是一個元組,可以自動解包。

python
def get_stats(numbers):
? ? return min(numbers), max(numbers), sum(numbers) / len(numbers)
min_val, max_val, avg = get_stats([1, 2, 3, 4, 5])
print(min_val, max_val, avg) ? # 1 5 3.0

3.3 返回函數(shù)(閉包)

函數(shù)可以作為返回值,形成閉包,保留外部函數(shù)的變量。

python
def make_multiplier(n):
? ? def multiplier(x):
? ? ? ? return x * n
? ? return multiplier
times2 = make_multiplier(2)
times3 = make_multiplier(3)
print(times2(5)) ? # 10
print(times3(5)) ? # 15

3.4 返回生成器(yield)

使用 yield可以讓函數(shù)返回一個生成器對象,實現(xiàn)惰性求值,節(jié)省內存。

python
def count_up_to(n):
? ? i = 1
? ? while i <= n:
? ? ? ? yield i
? ? ? ? i += 1
for num in count_up_to(5):
? ? print(num) ? # 1 2 3 4 5

四、進階技巧

4.1 使用類型提示(Type Hints)

Python 3.5+ 支持類型注解,提高代碼可讀性和 IDE 支持。

python
def greet(name: str, age: int = 18) -> str:
? ? return f"{name} is {age} years old."

4.2 強制關鍵字參數(shù)

在 *之后的參數(shù)必須使用關鍵字傳遞,避免歧義。

python
def person_info(name, *, age, city):
? ? print(f"{name}, {age}, {city}")
person_info("Alice", age=25, city="NYC") ? # 正確
# person_info("Alice", 25, "NYC") ? ? ? ? ?# 錯誤

4.3 參數(shù)與返回值的文檔

使用 docstring 清晰描述參數(shù)和返回值。

python
def divide(a: float, b: float) -> float:
? ? """
? ? 返回 a 除以 b 的結果。
? ? 參數(shù):
? ? ? ? a (float): 被除數(shù)
? ? ? ? b (float): 除數(shù)
? ? 返回:
? ? ? ? float: 商
? ? 異常:
? ? ? ? ZeroDivisionError: 當 b 為 0 時拋出
? ? """
? ? return a / b

五、總結

位置參數(shù): def f(a, b), 必須按順序傳入 
默認參數(shù): def f(a, b=1)可選,定義時求值 
可變位置參數(shù): def f(*args), 接收多個位置參數(shù),打包為元組 
關鍵字參數(shù): def f(a, *, b), * 后必須用關鍵字傳遞 
可變關鍵字參數(shù): def f(**kwargs), 接收多個關鍵字參數(shù),打包為字典 

到此這篇關于一文掌握Python函數(shù)進階:參數(shù)類型與返回值的文章就介紹到這了,更多相關Python參數(shù)類型與返回值內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • pytorch實現(xiàn)CNN卷積神經(jīng)網(wǎng)絡

    pytorch實現(xiàn)CNN卷積神經(jīng)網(wǎng)絡

    這篇文章主要為大家詳細介紹了pytorch實現(xiàn)CNN卷積神經(jīng)網(wǎng)絡,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Python基于stuck實現(xiàn)scoket文件傳輸

    Python基于stuck實現(xiàn)scoket文件傳輸

    這篇文章主要介紹了Python基于stuck實現(xiàn)scoket文件傳輸,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • 使用Python和OpenCV進行視覺圖像分割的代碼示例

    使用Python和OpenCV進行視覺圖像分割的代碼示例

    在圖像處理領域,圖像分割是一項基礎且關鍵的技術,它涉及到將圖像劃分為若干個具有特定屬性的區(qū)域,本文將通過一個實踐項目,展示如何使用Python編程語言,結合OpenCV庫,對一張玫瑰花的圖片進行圖像分割,需要的朋友可以參考下
    2025-01-01
  • 使用Python holidays庫獲取中國節(jié)日的代碼示例

    使用Python holidays庫獲取中國節(jié)日的代碼示例

    在軟件開發(fā)中,處理節(jié)假日信息是一個常見需求,尤其是在進行日期計算、日程安排和自動化工作流時,Python 提供了一個名為??holidays??的庫,它能夠輕松獲取節(jié)假日信息,本文將重點介紹如何使用??holidays??庫獲取中國的節(jié)日,并提供詳細的代碼示例和應用場景
    2024-07-07
  • 淺談python str.format與制表符\t關于中文對齊的細節(jié)問題

    淺談python str.format與制表符\t關于中文對齊的細節(jié)問題

    今天小編就為大家分享一篇淺談python str.format與制表符\t關于中文對齊的細節(jié)問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python刪除csv文件的行列

    python刪除csv文件的行列

    這篇文章主要介紹了python刪除csv文件中的某幾列或行,主要介紹了python對csv刪除的方法,感興趣的同學可以參考學習
    2021-04-04
  • python爬蟲常用的模塊分析

    python爬蟲常用的模塊分析

    這篇文章主要介紹了python爬蟲常用的模塊的creepy模塊,功能非常強大,文中較為詳細的講述了模塊接口的功能及用法,需要的朋友可以參考下
    2014-08-08
  • Python類屬性與實例屬性用法分析

    Python類屬性與實例屬性用法分析

    這篇文章主要介紹了Python類屬性與實例屬性用法,實例分析了Python類屬性與實例屬性的功能、定義與使用技巧,需要的朋友可以參考下
    2015-05-05
  • Pytho爬蟲中Requests設置請求頭Headers的方法

    Pytho爬蟲中Requests設置請求頭Headers的方法

    這篇文章主要介紹了Pytho爬蟲中Requests設置請求頭Headers的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • python itertools包內置無限迭代器

    python itertools包內置無限迭代器

    這篇文章主要介紹了python itertools包內置無限迭代器,?Python的內建模塊itertools提供了非常有用的用于操作迭代對象的函數(shù),itertools提供的幾個“無限”迭代器。下文更多相關內容,需要的朋友可以參考一下
    2022-03-03

最新評論

辽宁省| 松江区| 察隅县| 平定县| 蒙城县| 南华县| 新蔡县| 桓仁| 大埔县| 伊金霍洛旗| 湖口县| 普定县| 虎林市| 仁化县| 怀柔区| 新河县| 宝应县| 凤山县| 张家界市| 三江| 托克托县| 大新县| 鄂州市| 江安县| 黄梅县| 朝阳县| 刚察县| 瓦房店市| 象山县| 台湾省| 浮山县| 色达县| 双牌县| 黔西县| 千阳县| 邹城市| 龙江县| 临夏市| 无棣县| 平泉县| 喜德县|