在這個用例中,我們要討論的是關於函數的傳參問題
我所使用的python版本為3.3.2
對於函數:
1 def fun(arg): 2 print(arg) 3 4 def main(): 5 fun('hello,Hongten') 6 7 if __name__ == '__main__': 8 main()
當我們傳遞一個參數給fun()函數,即可打印出傳遞的參數值
信息。
這里打印的信息為:
hello,Hongten
對於下面的用例:
1 def fun(a=1, b=None, c=None, *args): 2 print('{0},{1},{2},{3}'.format(a, b, c, args)) 3 4 def main(): 5 fun(a='one') 6 fun('one') 7 8 if __name__ == '__main__': 9 main()
當傳遞的參數為:fun(a='one')和fun('one')這樣的傳參都是把值復制給參數a,所有兩種傳參的效果是一樣的:
one,None,None,()
one,None,None,()
當然我們也可以給參數:b,c,*args賦值
如:
1 def fun(a=1, b=None, c=None, *args): 2 print('{0},{1},{2},{3}'.format(a, b, c, args)) 3 4 def main(): 5 fun('one',1,2,('hongten')) 6 7 if __name__ == '__main__': 8 main()
這樣我們就給參數:b,c,args賦上了值
運行效果:
one,1,2,('hongten',)
在上面的列子中,我們不能繞開參數*args前面的參數a,b,c給*args復制:
如:
1 def fun(a=1, b=None, c=None, *args): 2 print('{0},{1},{2},{3}'.format(a, b, c, args)) 3 4 def main(): 5 fun(args=('hongten')) 6 7 if __name__ == '__main__': 8 main()
運行效果:
Traceback (most recent call last): File "E:/Python33/python_workspace/test_fun.py", line 21, in <module> main() File "E:/Python33/python_workspace/test_fun.py", line 18, in main fun(args=('hongten')) TypeError: fun() got an unexpected keyword argument 'args'
但是對於參數:a,b,c來說,是可以使用這樣的方式進行賦值
如:
1 def fun(a=1, b=None, c=None, *args): 2 print('{0},{1},{2},{3}'.format(a, b, c, args)) 3 4 def main(): 5 fun(c=('hongten'), b=2, a=[1,2,3]) 6 7 if __name__ == '__main__': 8 main()
運行效果:
[1, 2, 3],2,hongten,()