Python函数传参方式超级大汇总
位置參數(shù)
位置參數(shù)傳遞是最為簡單的傳遞方式,按照函數(shù)參數(shù)的位置順序逐個匹配傳入,傳入?yún)?shù)的個數(shù)必須與函數(shù)參數(shù)個數(shù)一致。
見示例1,根據(jù)位置順序進行匹配,a,b,c分別賦值為2,3,4
示例1
def func(a,b,c):print("args:",a,b,c)if __name__ == "__main__":func(2,3,4) #輸出結(jié)果 args: 2 3 4關(guān)鍵字參數(shù)
通過關(guān)鍵字對變量進行賦值,可以對全部關(guān)鍵字進行賦值,這時候位置可以隨意改變。見示例2,輸出結(jié)果與示例1一致。
示例2
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' def func(a,b,c):print("args:",a,b,c)if __name__ == "__main__":func(c=4,a=2,b=3) #輸出結(jié)果 args: 2 3 4也可以對部分關(guān)鍵字進行賦值,這屬于位置參數(shù)和關(guān)鍵字參數(shù)的混用,有關(guān)鍵字的部分必須放在后面,見示例3
示例3
def func(a,b,c):print("args:",a,b,c)if __name__ == "__main__":func(2,c=4,b=3) #輸出結(jié)果 args: 2 3 4默認參數(shù)
有些函數(shù)參數(shù)提供了默認值,如果要使用,可不傳入,如示例4
示例4
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' def func(a,b,c=4):print("args:",a,b,c)if __name__ == "__main__":func(2,3) #輸出結(jié)果 args: 2 3 4如果不使用其定義的默認值,可自行傳入,對其修改,如示例5
示例5
def func(a,b,c=4):print("args:",a,b,c)if __name__ == "__main__":func(2,3,5) #輸出結(jié)果 args: 2 3 5命名關(guān)鍵字參數(shù)
與普通關(guān)鍵字參數(shù)不同,命名關(guān)鍵字參數(shù)必須用進行區(qū)分,后面的參數(shù)必須通過關(guān)鍵字傳入,見示例6
示例6
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' def func(a,b,*,c):print("args:",a,b,c)if __name__ == "__main__":func(2,3,c=4) #輸出結(jié)果 args: 2 3 4如果不按照關(guān)鍵字傳入,則報TypeError的錯誤,見示例7
示例7
def func(a,b,*,c):print("args:",a,b,c)if __name__ == "__main__":func(2,3,4) #TypeError: func() takes 2 positional arguments but 3 were given可變參數(shù)
如果定義的函數(shù)中帶有*args或者**args都是屬于可變參數(shù)方式進行參數(shù)傳入
*args是以元組的方式收集不匹配的的位置參數(shù),見示例8
示例8
def func(a,b,*c):print("args c:"c) if __name__ == "__main__":func(2,3,4,5,6) #輸出結(jié)果 args c: (4, 5, 6)在示例8中,有a,b,c3個形式參數(shù),但是按照位置參數(shù)的形式傳入了5個參數(shù),最后的3個參數(shù)都按照元組的形式(4,5,6)傳給了c。
定義函數(shù)時候,*args必須放在位置參數(shù)后面,否則報TypeError的錯誤,見示例9。
#示例9 def func(a,*c,d):print("args c:",c,d)if __name__ == "__main__":func(2,3,4,5,6) #TypeError: func() missing 1 required keyword-only argument: 'd'**args是以字典的形式收集不匹配的位置參數(shù),僅對關(guān)鍵字參數(shù)傳入有效,見示例10
示例10
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' def func(a,b,**c):print("args c:",c)if __name__ == "__main__":func(2,3,c=4,d=5,e=6)#輸出結(jié)果 args c: {'c': 4, 'd': 5, 'e': 6}在示例10中,參數(shù)c收集了以字典的形式收集了后面的3個參數(shù)。跟*args一樣,函數(shù)中的**args必須放在位置參數(shù)后面。
再看一個傳參方式混合使用的的例子,見示例11。
示例11
def func(a,*b,c=None,**d):print("a:",a)print("b:",b)print("c:",c)print("d:",d)if __name__ == "__main__":func(2,3,4,c=4,d=5,e=6)輸出結(jié)果如下所示:
a: 2 b: (3, 4) c: 4 d: {'d': 5, 'e': 6}從示例11可見,2賦值給a,b以元組的形式收集了3,4,c=4修改了默認參數(shù)的值,d以字典的形式收集了4,5,6
前面所說的args或者**args是出現(xiàn)在函數(shù)定義中的,其實在參數(shù)傳入時候也可以使用使用和**,他們會數(shù)據(jù)進行解包。如示例12和示例13
示例12
''' 遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學(xué)習(xí)教程和PDF電子書! ''' def func(a,b,c):print("a:",a,",b:",b,",c:",c) if __name__ == "__main__":a=(2,3,4)func(*a)#輸出結(jié)果 a: 2 ,b: 3 ,c: 4示例13
def func(a,b,c):print("a:",a,",b:",b,",c:",c) if __name__ == "__main__":a={'a':1,'b':2,'c':3}func(**a)#輸出結(jié)果 a: 2 ,b: 3 ,c: 4總結(jié)
以上是生活随笔為你收集整理的Python函数传参方式超级大汇总的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python教程:将一个列表切分成多个小
- 下一篇: python 统计使用技巧