python學習筆記(函數)

#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}

閉包和裝飾器的兩篇不錯的文章html

https://foofish.net/understand-decorator.htmlpython

https://foofish.net/python-decorator.html閉包

相關文章
相關標籤/搜索