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