#1 #参数仅包含必选参数 def func(x,y): y.append(x) print("%s" % y) func(1,[]) #>>[1] func(2,[]) #>>[2] #2 #参数包含必选和可选参数,带默认值的参数为可选参数 #若参数默认值为可变对象,默认参数保留了每次函数调用的修改 def func(x,y=[]): y.append(x) print("%s" % y) func(1) #>>[1] func(2) #>>[1, 2] #为了防止以上情况发生,默认值改为none,并在函数体内加入检查代码 def func(x,y=None): if y is None: y=[] y.append(x) print("%s" % y) func(1) #>>[1] func(2) #>>[2] #3 #函数参数调用,有两种方法,一种是使用位置参数,一种是使用关键字参数 def foo(w,x,y,z): pass foo(1,2,3,4) foo(1,2,z=4,y=3) #使用关键字参数时,参数的顺序并不重要 #4 #可变长参数列表,在定义函数时,使用*和** #使用*,将所有余下参数作为元组放入args变量,在函数内调用别的函数时,使用*args,将args元组重新转为参数列表,传递给被调用函数 def foo1(x,*args): print("foo1: p1=%s,p2=%s" % (x,args)) def foo(w,x,*args): print("foo: p1=%s,p2=%s,p3=%s" % (w,x,args)) foo1(x,*args) foo(1,2,3,4,5,6) #>>foo: p1=1,p2=2,p3=(3, 4, 5, 6) #>>foo1: p1=2,p2=(3, 4, 5, 6) #使用**,将所有余下的关键字参数作为字典放入kwargs变量 def foo(w,x,**kwargs): print("foo: p1=%s,p2=%s,p3=%s" % (w,x,kwargs)) foo(1,x=2,y=3,z=4) #>>foo: p1=1,p2=2,p3={‘y‘: 3, ‘z‘: 4} #同时使用*和** def foo(w,*args,**kwargs): print("foo: p1=%s,p2=%s,p3=%s" % (w,args,kwargs)) foo(1,2,3,y=4,z=5) #>>foo: p1=1,p2=(2, 3),p3={‘y‘: 4, ‘z‘: 5}