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

python中的*和**做參數(shù)的用法詳解

 更新時(shí)間:2025年11月05日 09:15:00   作者:令狐掌門  
python的方法的參數(shù)除了可以使用標(biāo)識(shí)符,還可以使用*和**作為參數(shù),這些符號(hào)在Python中常用于處理可變數(shù)量的參數(shù),本文給大家介紹python *和**做參數(shù)的用法,感興趣的朋友跟隨小編一起看看吧

python的方法的參數(shù)除了可以使用標(biāo)識(shí)符,還可以使用***作為參數(shù),這些符號(hào)在Python中常用于處理可變數(shù)量的參數(shù)(也稱為“可變參數(shù)”或“星號(hào)參數(shù)”)。

注意:*通常與變量名結(jié)合使用,如*args(表示任意數(shù)量的位置參數(shù));**通常如**kwargs(表示任意數(shù)量的關(guān)鍵字參數(shù))。這些名字是慣例,不是必須的,可以用其他名字替換。

1.*的用法(可變位置參數(shù))

  • 在函數(shù)定義中* 用于收集任意數(shù)量的位置參數(shù)(positional arguments),這些參數(shù)會(huì)被打包成一個(gè)元組(tuple)。這允許函數(shù)接受不定數(shù)量的參數(shù),而無需預(yù)先指定。
    • 語(yǔ)法:def func(固定參數(shù), *args): ...
    • *args 收集所有多余的位置參數(shù)。
    • 位置:*args 必須在固定位置參數(shù)之后,在**kwargs之前(如果有)。
  • 在函數(shù)調(diào)用中* 用于“展開”(unpack)一個(gè)可迭代對(duì)象(如列表、元組),將其元素作為位置參數(shù)傳入函數(shù)。
    • 語(yǔ)法:func(*iterable)
    • 這相當(dāng)于將iterable的每個(gè)元素逐個(gè)作為位置參數(shù)傳遞。

示例(定義和調(diào)用結(jié)合)

# 函數(shù)定義中使用 *
def sum_numbers(*args):
    total = 0
    for num in args:  # args是一個(gè)元組
        total += num
    return total
# 調(diào)用:直接傳入多個(gè)位置參數(shù)
print(sum_numbers(1, 2, 3))  # 輸出: 6  (args = (1, 2, 3))
# 函數(shù)調(diào)用中使用 * 展開
numbers = [4, 5, 6]  # 列表
print(sum_numbers(*numbers))  # 輸出: 15  (相當(dāng)于 sum_numbers(4, 5, 6))

2.**的用法(可變關(guān)鍵字參數(shù))

  • 在函數(shù)定義中** 用于收集任意數(shù)量的關(guān)鍵字參數(shù)(keyword arguments),這些參數(shù)會(huì)被打包成一個(gè)字典(dict)。鍵是參數(shù)名,值是參數(shù)值。
    • 語(yǔ)法:def func(固定參數(shù), **kwargs): ...
    • **kwargs 收集所有多余的關(guān)鍵字參數(shù)。
    • 位置:**kwargs 必須在所有其他參數(shù)之后(包括*args)。
  • 在函數(shù)調(diào)用中** 用于“展開”一個(gè)字典,將其鍵值對(duì)作為關(guān)鍵字參數(shù)傳入函數(shù)。
    • 語(yǔ)法:func(**dictionary)
    • 這相當(dāng)于將字典的每個(gè)鍵值對(duì)作為 key=value 形式傳遞。

示例(定義和調(diào)用結(jié)合)

# 函數(shù)定義中使用 **
def print_info(**kwargs):
    for key, value in kwargs.items():  # kwargs是一個(gè)字典
        print(f"{key}: {value}")
# 調(diào)用:直接傳入多個(gè)關(guān)鍵字參數(shù)
print_info(name="Alice", age=30, city="New York")
# 輸出:
# name: Alice
# age: 30
# city: New York
# 函數(shù)調(diào)用中使用 ** 展開
info = {"name": "Bob", "age": 25, "city": "London"}
print_info(**info)  # 相當(dāng)于 print_info(name="Bob", age=25, city="London")
# 輸出同上

3. 同時(shí)使用*和**

  • 在函數(shù)定義中:可以同時(shí)使用*args**kwargs,以處理不定數(shù)量的位置參數(shù)和關(guān)鍵字參數(shù)。
    • 順序必須是:固定位置參數(shù) → *args → 固定關(guān)鍵字參數(shù) → **kwargs。
    • 這允許函數(shù)非常靈活,能接受各種參數(shù)組合。
  • 在函數(shù)調(diào)用中:可以同時(shí)使用*展開位置參數(shù)和**展開關(guān)鍵字參數(shù)。
    • 語(yǔ)法:func(*iterable, **dictionary)
    • 注意:展開的位置參數(shù)必須在關(guān)鍵字參數(shù)之前(Python的調(diào)用規(guī)則)。
  • 原理:在定義中,***允許函數(shù)“捕獲”額外參數(shù);在調(diào)用中,它們?cè)试S“注入”參數(shù)。這常用于裝飾器、API函數(shù)或需要轉(zhuǎn)發(fā)參數(shù)的場(chǎng)景。

詳細(xì)代碼示例:同時(shí)使用*和**(定義和調(diào)用)

# 示例1: 函數(shù)定義中同時(shí)使用 * 和 **
def flexible_func(a, b, *args, **kwargs):
    print(f"固定位置參數(shù): a={a}, b=")
    print(f"可變位置參數(shù) (*args): {args}")  # 元組
    print(f"可變關(guān)鍵字參數(shù) (**kwargs): {kwargs}")  # 字典
    # 可以進(jìn)一步處理args和kwargs
    total = a + b + sum(args)
    for key, value in kwargs.items():
        print(f"額外信息: {key} = {value}")
    return total
# 調(diào)用方式1: 直接傳入?yún)?shù)
result = flexible_func(1, 2, 3, 4, name="Alice", age=30)
print(f"結(jié)果: {result}")
# 輸出:
# 固定位置參數(shù): a=1, b=2
# 可變位置參數(shù) (*args): (3, 4)
# 可變關(guān)鍵字參數(shù) (**kwargs): {'name': 'Alice', 'age': 30}
# 額外信息: name = Alice
# 額外信息: age = 30
# 結(jié)果: 10  (1+2+3+4)
# 調(diào)用方式2: 使用 * 和 ** 展開傳入
pos_args = [1, 2, 3, 4]  # 列表作為位置參數(shù)
kw_args = {"name": "Bob", "age": 25}  # 字典作為關(guān)鍵字參數(shù)
result = flexible_func(*pos_args, **kw_args)  # 相當(dāng)于 flexible_func(1, 2, 3, 4, name="Bob", age=25)
print(f"結(jié)果: {result}")
# 輸出同上,但 kwargs={'name': 'Bob', 'age': 25},結(jié)果仍為10
# 示例2: 更復(fù)雜的場(chǎng)景(參數(shù)轉(zhuǎn)發(fā))
def wrapper_func(*args, **kwargs):
    # 將所有參數(shù)轉(zhuǎn)發(fā)給另一個(gè)函數(shù)
    return flexible_func(*args, **kwargs)
# 調(diào)用wrapper_func,它會(huì)轉(zhuǎn)發(fā)
result = wrapper_func(5, 6, 7, city="Tokyo", country="Japan")
print(f"結(jié)果: {result}")
# 輸出:
# 固定位置參數(shù): a=5, b=6
# 可變位置參數(shù) (*args): (7,)
# 可變關(guān)鍵字參數(shù) (**kwargs): {'city': 'Tokyo', 'country': 'Japan'}
# 額外信息: city = Tokyo
# 額外信息: country = Japan
# 結(jié)果: 18  (5+6+7)

另一個(gè)綜合示例:混合固定參數(shù)和可變參數(shù)

def order_food(main_dish, *sides, **options):
    print(f"主菜: {main_dish}")
    print(f"配菜: {sides}")
    print(f"選項(xiàng): {options}")
# 直接調(diào)用
order_food("Pizza", "Fries", "Salad", size="Large", drink="Coke")
# 輸出:
# 主菜: Pizza
# 配菜: ('Fries', 'Salad')
# 選項(xiàng): {'size': 'Large', 'drink': 'Coke'}
# 展開調(diào)用
sides_list = ["Fries", "Salad"]
options_dict = {"size": "Large", "drink": "Coke"}
order_food("Pizza", *sides_list, **options_dict)  # 同上輸出

注意事項(xiàng)

  • 順序規(guī)則
    • 定義時(shí):位置參數(shù) → *args → 關(guān)鍵字參數(shù) → **kwargs。
    • 調(diào)用時(shí):位置參數(shù)(包括*展開)必須在關(guān)鍵字參數(shù)(包括**展開)之前。
  • Python版本差異:Python 3.5+ 支持更多靈活性,如僅位置參數(shù)(/)和僅關(guān)鍵字參數(shù)(*),但基本用法不變。
  • 常見錯(cuò)誤
    • 如果*args接收到關(guān)鍵字參數(shù),會(huì)報(bào)錯(cuò)(TypeError)。
    • 展開時(shí),確保iterable是可迭代的,dictionary的鍵必須是字符串。
    • 不要在定義中重復(fù)使用***(如兩個(gè)*args)。
  • 實(shí)際應(yīng)用:常用于庫(kù)函數(shù)(如print(*objects, sep=' '))、裝飾器或需要處理未知參數(shù)的函數(shù)。

到此這篇關(guān)于python *和**做參數(shù)的用法的文章就介紹到這了,更多相關(guān)python *和**內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Python實(shí)現(xiàn)為PDF文檔設(shè)置背景色或背景圖

    使用Python實(shí)現(xiàn)為PDF文檔設(shè)置背景色或背景圖

    PDF作為一種跨平臺(tái)、高保真的文件格式被廣泛應(yīng)用,這篇文章主要為大家詳細(xì)介紹了如何使用Python代碼對(duì)PDF文檔進(jìn)行頁(yè)面背景色或背景圖片的設(shè)置,需要的可以參考下
    2024-04-04
  • Python+Pygame實(shí)現(xiàn)代碼雨動(dòng)畫效果

    Python+Pygame實(shí)現(xiàn)代碼雨動(dòng)畫效果

    這篇文章主要為大家詳細(xì)介紹了python中的一個(gè)小項(xiàng)目:利用pygame實(shí)現(xiàn)代碼雨動(dòng)畫效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下
    2022-11-11
  • 淺談Python線程的同步互斥與死鎖

    淺談Python線程的同步互斥與死鎖

    這篇文章主要介紹了淺談Python線程的同步互斥與死鎖,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 2行Python實(shí)現(xiàn)給圖片加水印效果

    2行Python實(shí)現(xiàn)給圖片加水印效果

    這篇文章主要給大家介紹了如何通過2行Python實(shí)現(xiàn)給圖片加水印效果的相關(guān)資料,實(shí)現(xiàn)的方法主要是利用filestools庫(kù),文中還介紹了一行代碼如何給圖片加水印,需要的朋友可以參考下
    2021-10-10
  • Pytorch?和?Tensorflow?v1?兼容的環(huán)境搭建方法

    Pytorch?和?Tensorflow?v1?兼容的環(huán)境搭建方法

    這篇文章主要介紹了搭建Pytorch?和?Tensorflow?v1?兼容的環(huán)境,本文是小編經(jīng)過多次實(shí)踐得到的環(huán)境配置教程,給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-11-11
  • python+appium實(shí)現(xiàn)自動(dòng)化測(cè)試的示例代碼

    python+appium實(shí)現(xiàn)自動(dòng)化測(cè)試的示例代碼

    appium是一個(gè)開源的測(cè)試自動(dòng)化框架,可以與原生的、混合的和移動(dòng)的web應(yīng)用程序使用,本文主要介紹了python+appium實(shí)現(xiàn)自動(dòng)化測(cè)試的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • 使用python讀取.text文件特定行的數(shù)據(jù)方法

    使用python讀取.text文件特定行的數(shù)據(jù)方法

    今天小編就為大家分享一篇使用python讀取.text文件特定行的數(shù)據(jù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • Python進(jìn)階學(xué)習(xí)之特殊方法實(shí)例詳析

    Python進(jìn)階學(xué)習(xí)之特殊方法實(shí)例詳析

    一般說來,特殊的方法都被用來模仿某個(gè)行為。下面這篇文章主要給大家介紹了關(guān)于Python進(jìn)階學(xué)習(xí)之特殊方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起看看吧。
    2017-12-12
  • pycharm new project變成灰色的解決方法

    pycharm new project變成灰色的解決方法

    今天小編就為大家分享一篇pycharm new project變成灰色的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • 在VS Code上搭建Python開發(fā)環(huán)境的方法

    在VS Code上搭建Python開發(fā)環(huán)境的方法

    這篇文章主要介紹了在VS Code上搭建Python開發(fā)環(huán)境的方法,需要的朋友可以參考下
    2018-04-04

最新評(píng)論

同德县| 察隅县| 大港区| 金阳县| 文登市| 清水河县| 和平区| 博野县| 浦东新区| 新沂市| 赣榆县| 河西区| 姚安县| 禹城市| 大埔区| 万州区| 双鸭山市| 镇江市| 耿马| 金湖县| 镇原县| 云南省| 邢台县| 阆中市| 东阿县| 建水县| 和林格尔县| 上栗县| 府谷县| 青神县| 高雄县| 临武县| 汤原县| 文登市| 海南省| 西吉县| 平远县| 壶关县| 绍兴县| 公安县| 宣威市|