欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文帶你精通Python中*args和**kwargs的應(yīng)用技巧

 更新時(shí)間:2024年03月13日 14:53:05   作者:python慕遙  
如果能在Python中創(chuàng)建適應(yīng)不同場(chǎng)景的函數(shù),而無(wú)需每次都重寫(xiě)它們,會(huì)使得操作簡(jiǎn)潔方便,這就是*args和**kwargs的魔力所在,下面我們就來(lái)看看它們的具體一些應(yīng)用技巧吧

大家好,如果能在Python中創(chuàng)建適應(yīng)不同場(chǎng)景的函數(shù),而無(wú)需每次都重寫(xiě)它們,會(huì)使得操作簡(jiǎn)潔方便,這就是*args和**kwargs的魔力所在。就像為函數(shù)準(zhǔn)備了一個(gè)神奇的袋子,可以裝下任意多的參數(shù)——使代碼更整潔、更靈活。

為了幫助大家更好地理解Python中的*args和**kwargs,接下來(lái)展示一下如果沒(méi)有這些概念,代碼將會(huì)是什么狀態(tài)。

這里展示一個(gè)簡(jiǎn)單的函數(shù)simple_sum,用于將兩個(gè)數(shù)字相加:

def simple_sum(a, b):
    return a + b
 
result = simple_sum(3, 7)
print(result)

想象一下如果想創(chuàng)建一個(gè)將三個(gè)數(shù)字相加的函數(shù),最終可能會(huì)以如下方式重寫(xiě)這個(gè)函數(shù):

def simple_sum_three(a, b, c):
    return a + b + c
 
result_three = simple_sum_three(3, 7, 5)
print(result_three)

如果想將更多的數(shù)字相加,不得不為每種情況創(chuàng)建新函數(shù),這既不優(yōu)雅也不靈活。為了解決這個(gè)問(wèn)題,有一個(gè)稱為“參數(shù)打包”的概念,可以在函數(shù)定義語(yǔ)句中使用*符號(hào),將一個(gè)參數(shù)轉(zhuǎn)換為超級(jí)參數(shù),它可以作為一個(gè)袋子,并在調(diào)用函數(shù)時(shí)容納/打包傳遞它的所有值,存儲(chǔ)在一個(gè)變量中。

同樣,符號(hào)*也可以用于解包數(shù)據(jù)結(jié)構(gòu),具體取決于它的使用方式,本文將在后面介紹如何做到這一點(diǎn)。

1.使用*args進(jìn)行參數(shù)打包

在Python中,當(dāng)在函數(shù)定義中看到一個(gè)星號(hào)(*)緊跟在一個(gè)參數(shù)前面時(shí),這是參數(shù)打包的信號(hào)。這意味著可以向函數(shù)傳遞任意數(shù)量的參數(shù),它們將被整潔地打包成一個(gè)元組。就像為函數(shù)準(zhǔn)備了一個(gè)神奇的袋子,使它能夠適應(yīng)不同的情況,而無(wú)需不斷地重寫(xiě)函數(shù)。

def magic_sum(*args):
    result = sum(args)
    return result
 
# 三個(gè)數(shù)字相加
result1 = magic_sum(3, 7, 5)
print("Result 1:", result1)  # 預(yù)期輸出:15(3+7+5)
 
# 五個(gè)數(shù)字相加
result2 = magic_sum(1, 2, 3, 4, 5)
print("Result 2:", result2)  # 預(yù)期輸出:15(1+2+3+4+5)
 
# 相加更多數(shù)字
result3 = magic_sum(10, 20, 30, 40, 50, 60)
print("Result 3:", result3)  # 預(yù)期輸出:210(10+20+30+40+50+60)

在這個(gè)示例中,magic_sum函數(shù)使用*args進(jìn)行參數(shù)打包??梢允褂貌煌瑪?shù)量的參數(shù)調(diào)用這個(gè)函數(shù),它會(huì)將這些參數(shù)整潔地打包成一個(gè)元組進(jìn)行加法運(yùn)算。在這種情況下,變量args就變成了一個(gè)元組。就像有了一個(gè)可以處理任意數(shù)量輸入的計(jì)算器,而無(wú)需更改其公式。

2.參數(shù)解包

另一方面,在調(diào)用函數(shù)時(shí),可以使用星號(hào)(*)表示正在解包一個(gè)值序列(元組、列表、集合、字符串),并將其元素作為單獨(dú)的值傳遞。這種方法適用于將數(shù)據(jù)保存在集合(例如元組)中,但希望從集合中提取每個(gè)值,并將其作為單獨(dú)參數(shù)傳遞給函數(shù)的情況。

def display_values(a, b, c):
    print("Value of a:", a)
    print("Value of b:", b)
    print("Value of c:", c)
 
# 解包一個(gè)元組并將其元素作為單獨(dú)的值傳遞
tuple_values = (7, 14, 21)
display_values(*tuple_values) # 等同于 display_values(7, 14, 21)

可以使用此方法從多個(gè)集合類(lèi)型數(shù)據(jù)中提取值:

def display_values(a, b, c):
    print("Value of a:", a)
    print("Value of b:", b)
    print("Value of c:", c)
 
# 解包一個(gè)元組并將其元素作為單獨(dú)的值傳遞
tuple_values = (7, 14, 21)
display_values(*tuple_values)  # 等同于 display_values(7, 14, 21)
 
# 解包一個(gè)列表
list_values = [30, 40, 50]
display_values(*list_values)  # 等同于 display_values(30, 40, 50)
 
# 解包一個(gè)字符串(每個(gè)字符成為單獨(dú)的參數(shù))
string_values = "XYZ"
display_values(*string_values)  # 等同于 display_values('X', 'Y', 'Z')
 
# 解包一個(gè)集合
set_values = {60, 70, 80}
display_values(*set_values)  # 順序可能會(huì)有變化,等同于 display_values(60, 70, 80)
 
# 解包一個(gè)范圍
range_values = range(3, 6)
display_values(*range_values)  # 等同于 display_values(3, 4, 5)

還可以將函數(shù)定義部分的a、b、c更改為values以接收可變數(shù)量的參數(shù)。values將成為傳遞的所有參數(shù)的元組。這可以理解為同時(shí)進(jìn)行打包和解包。

def display_values(*values): # 將數(shù)值打包到一個(gè)變量中。
    print("Values:", values)
 
# 解包一個(gè)元組并將其元素作為單獨(dú)的值傳遞
tuple_values = (7, 14, 21)
display_values(*tuple_values)

3.使用**進(jìn)行關(guān)鍵字參數(shù)打包

接下來(lái),本文將使用雙星號(hào)(**),這是Python的一個(gè)運(yùn)算符,它將字典的打包和解包引入其中。當(dāng)一個(gè)函數(shù)參數(shù)以“**”為前綴時(shí),它表示相應(yīng)的參數(shù)應(yīng)該是鍵值對(duì),并整齊地打包成一個(gè)字典。這與元組參數(shù)的打包相同,但用于函數(shù)參數(shù)為關(guān)鍵字參數(shù)的情況。

def display_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")
 
# 在函數(shù)調(diào)用中直接傳遞關(guān)鍵字參數(shù)
display_info(name='Alice', age=25, city='Wonderland')

4.關(guān)鍵字參數(shù)解包

解包字典,并將其內(nèi)容作為單獨(dú)的關(guān)鍵字參數(shù)傳遞給函數(shù)。這種方法適用于將數(shù)據(jù)保存在字典中,但又想從字典中提取每個(gè)鍵值對(duì),并將其作為單獨(dú)的關(guān)鍵字參數(shù)傳遞給函數(shù)的情況:

def display_person_info(name, age, city):
    print("Name:", name)
    print("Age:", age)
    print("City:", city)
 
# 解包一個(gè)包含預(yù)期鍵值對(duì)的字典
person_info = {'name': 'Alice', 'age': 25, 'city': 'Wonderland'}
display_person_info(**person_info)

5.結(jié)合使用*args和**kwargs

結(jié)合*args和**kwargs的力量,將它們分別視為長(zhǎng)度可變的位置參數(shù)列表和關(guān)鍵字參數(shù)列表。

def display_information(*args, **kwargs):
    print("Positional Arguments (*args):")
    for arg in args:
        print(arg)
 
    print("\nKeyword Arguments (**kwargs):")
    for key, value in kwargs.items():
        print(f"{key}: {value}")
 
# 使用位置參數(shù)和關(guān)鍵字參數(shù)的混合調(diào)用函數(shù)
display_information(1, 'apple', name='Alice', age=25, city='Wonderland')

在此示例中,display_information函數(shù)接收*args以處理任意數(shù)量的位置參數(shù),接收**kwargs以處理任意數(shù)量的關(guān)鍵字參數(shù),然后該函數(shù)分別打印每種類(lèi)型的參數(shù)。

6.一次性進(jìn)行多次解包

Python中的另一個(gè)有趣功能是能夠在單個(gè)函數(shù)調(diào)用中執(zhí)行多次解包。

def display_values(*args):
    for value in args:
        print(value)
 
# 在單個(gè)函數(shù)調(diào)用中進(jìn)行多次解包
list_values = [1, 2, 3]
tuple_values = (4, 5, 6)
set_values = {7, 8, 9}
 
display_values(*list_values, *tuple_values, *set_values)

在此示例中,display_values函數(shù)使用多次解包以單行方式調(diào)用三種不同的可迭代類(lèi)型(列表、元組和集合)。在函數(shù)調(diào)用期間,通過(guò)多次解包(*list_values,*tuple_values,*set_values)收集所有值,存儲(chǔ)在單個(gè)args參數(shù)中。

到此這篇關(guān)于一文帶你精通Python中*args和**kwargs的應(yīng)用技巧的文章就介紹到這了,更多相關(guān)Python *args **kwargs內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論