def用來創建函數,其中標題行由def關鍵字,函數名和參數組成,def子句剩余部分包括一個可選的文檔子串和必需的函數體。
def func_name(args): "function document" func_body裝飾器指函數,它們接受函數對象,具體還是看例子吧,簡單明了
@decoTwo@decoOnedef func(args1,...): pass#上面等價于def func(args1,...):pass#func = decoTwo(decoOne(func))#以下是帶參數的@deco(args) # deco()用args做了操作并返回函數對象,返回的函數對象以func作為其參數的裝飾器def func(): pass#等價func=deco(args)(func)python支持默認參數與可變長參數,其中可變長的參數元祖要在位置和默認參數之后,帶元組的函數用法如下:
def func([args,] *args_tuple): func_body星號操作符之后的形參作為元組傳遞給函數,元組保存了所有傳遞給函數的額外參數,如果沒有則元祖為空。在正常情況下如果函數調用與函數定義的參數不匹配會產生TypeError的異常,通過末尾增加一個可變的參數列表可以處理超出數目的參數,這些超出數目的參數會被添加到參數元組,對于不定數目或者額外集合的關鍵字,參數被放入一個字典中,同時為了區分關鍵字和非關鍵字非正式參數,使用了(**)。
>>> def func(arg1,arg2="default",*nc,**nk):... 函數式編程lambda:用于創建匿名函數,一個完整的lambda語句代表一個表達式,這個表達式的定義體要和聲明放在一行,參數是可選的,如果使用參數,則參數通常是表達式的一部分,lambda主要用于返回可調用的函數對象,這有點類似一個函數的單行版本,起初剛準備下結論與C++的內聯類似,但看了書中下一句就發現自己想多了~~,lambda語句的目的是由于性能原因,在調用時繞過函數的棧分配,創建了一個框架對象。
lambda [arg1[,arg2,...argN]]:expression例:
>>> a=lambda x,y=10:x+y>>> a(20)30>>> a(20,30)50>>> b=lambda *z:z>>> b(23,'adf')(23, 'adf')>>> b()()>>> b('adsf')('adsf',)將全局變量的名字聲明在一個函數體內的時候,全局變量的名字會被局部變量覆蓋,因此為了明確使用一個已命名的全局變量,可以在函數體內用global聲明全局變量而無須建立新的局部變量。
新聞熱點
疑難解答