日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 函数的调用的时候参数的传递_python定义函数时的参数调用函数时的传参...

發布時間:2025/3/20 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 函数的调用的时候参数的传递_python定义函数时的参数调用函数时的传参... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、定義函數:

1、位置參數:直接定義參數

2、默認參數(或者關鍵字參數):參數名 = "默認值"

3、位置參數必須在默認參數之前

二、調用函數:

1、按位置傳,直接寫參數的值

2、按關鍵字傳,關鍵字 = "值"

3、位置參數必須在關鍵字參數之前

4、關鍵字參數可在*args和**kwargs之前

注:調用時,無論定義的函數是使用位置參數還是默認值參數,調用函數時,都可以按位置傳參或者按關鍵字進行傳參,即調用時的傳參形式和定義時的參數形式無關

def foo(a, b, c=3):print("a={},b={},c={}".format(a, b, c))

foo(1,2,3) #調用函數時按位置參數進行傳參#輸出 a=1,b=2,c=3

foo(a=1,b=2,c=3) #調用函數時按關鍵字參數傳參

foo(c=3,a=1,b=2) #使用關鍵字傳參時,與關鍵字的位置無關,即關鍵字參數之間不存在先后順序#上面調用的結果是一樣的

def foo(a, b, name=None,*args, **kwargs):print(name)print(args)print(kwargs)

A=(1, 2, 3)

B={"k1":"v1","k2":"v2"}

foo(1,2,C=6,*A,**B) #如果寫成foo(1,2,C=6,1, 2, 3,**B)則會報錯

1------->name

(2, 3)------->args

{'k2': 'v2', 'C': 6, 'k1': 'v1'}------->kwargs,C=6傳入kwargs中

三、動態參數

定義函數時:

動態位置參數使用*args進行定義(參數前加一個*),將所有的值進行聚合成一個元組

動態關鍵字參數使用**kwargs進行定義(參數前加二個*),將所有的值進行聚合成一個字典

調用函數時:

1、使用位置參數和關鍵字參數進行傳參

2、給一個序列加上*,就是將這個序列進行解包,然后按位置進行傳參

3、給一個字段加上**,就是將這個字典進行解包,然后按關鍵字參數進行傳參

def foo(*args):print(args)

foo(*[1,2,3])#輸出 (1, 2, 3)

def foo(**kwargs):print(kwargs)

foo(**{"a":1,"b":2})#輸出 {'a': 1, 'b': 2}

四、默認參數和可變參數混合使用

1、默認參數定義在可變參數之前

def foo(x,y = 1,*args):print(x)print(y)print(args)

foo(1,2,3,4,5,6,7,8,9) #調用函數,改變默認參數的值

1------->x=1

2-------->y=2(3, 4, 5, 6, 7, 8, 9)----->args的值變成元組

2、默認參數定義在可變參數之后

def foo(x,*args,y = 1000):print(x)print(y)print(args)

foo(1,2,3,4,5,6,7,8,9) #調用函數,使用默認值

1------->x=1

2-------->y=1000(2, 3, 4, 5, 6, 7, 8, 9)----->args的值變成元組

foo(1,2,3,4,5,6,7,8,y=2000) #調用函數,改變默認值

1------->x=1

2-------->y=2000(2, 3, 4, 5, 6, 7, 8)----->args的值變成元組

3、位置參數定義在可變位置參數之后

如果在一個星號參數后,或者在可變位置參數后出現普遍參數即位置參數,實際上已經不是普通參數了,而是keyworld-only參數(python3引入)

def foo(*args, x):print(args)print(x)

foo(1, 2, 3) #TypeError: foo() missing 1 required keyword-only argument: 'x'

foo(1,2,3,x=4)

args------>(1, 2, 3)

x------>4

1、args可以看做已經截獲了所有的位置參數,x不使用關鍵字傳參不可能拿到實參

2、使用foo(x=4,1,2,3)貌似可以,但是違反了關鍵字參數在位置參數之后的語法

五、復雜混合參數

#使用默認參數時,注意默認參數的位置要在args之后kwargs之前

def foo(x,*args,a=4,**kwargs):print(x)print(a)print(args)print(kwargs)

foo(1,5,6,7,8,y=2,z=3) #調用函數,不修改默認參數

1------->x=1

4------->a=4(5, 6, 7, 8)------->args

{'y': 2, 'z': 3}------->kwargs

#注意:當需要修改默認參數時,要調整默認參數的位置,要放在args之前即可,但不可放在開頭

def foo(x,a=4,*args,**kwargs):print(x)print(a)print(args)print(kwargs)

foo(1,9,5,6,7,8,y=2,z=3) #調用函數,修改默認參數a為9

1------->x=1

9------->a=9(5, 6, 7, 8)------->args

{'y': 2, 'z': 3}------->kwargs

六、總結

定義函數時參數順序:

1、位置參數--->默認參數--->可變位置參數--->可變關鍵字參數(調用時修改默認參數)

2、位置參數--->可變位置參數--->默認參數--->可變關鍵字參數((調用時可不修改默認參數)

調用函數順序:

1、位置參數在關鍵參數之前,調用時的傳參形式和定義時的參數形式無關

2、位置參數在最前,可變位置參數傳參和關鍵字參數傳參沒有先后之分,可變關鍵字參數最后

def foo(a, b, *args, name=None,* *kwargs):print(name)print(args)print(kwargs)

A=(1, 2, 3)

B={"k1":"v1","k2":"v2"}

foo(1,2,C=6,*A,**B) #關鍵字在可變位置參數之前#None------->name#(2, 3)------->args#{'k2': 'v2', 'C': 6, 'k1': 'v1'}------->kwargs,C=6傳入kwargs中

foo(1,2,*A,C=6,**B) #關鍵字在可變位置參數之后,輸出結果和上面一致

foo(1,2,*A,**B,C=6) #SyntaxError: invalid syntax,語法錯誤

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的python 函数的调用的时候参数的传递_python定义函数时的参数调用函数时的传参...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。