函數與生成器

函數

由若干語句組成的語句塊,函數名,參數列表構成,是組織代碼的最小單元,完成一定的功能,結構化編程對代碼的最基本的封裝,封裝的目的是為了復用

函數中沒有return,隱式會返回一個none值

定義中的參數列表成為形式參數,只是一種形式表達,簡稱形參

調用時寫的參數是實際參數,是實實在在傳入的值,簡稱實參

函數的定義,只是聲明了參數,不會執行,可以進行調用,定義需要在調用前,也就是說調用時,已經被定義過了

函數是否可調用,用callable(函數名)進行檢測

參數調用時傳入的參數要和定義的個數相匹配(可變參數例外)

位置參數:按照參數定義順序傳入實參

關鍵字參數:使用形參的名字來輸入實參的方式,如果使用了形參名字,那么傳參順序就可和定義順序不同,要求位置參數必須在關鍵字參數之前,位置參數是按照位置對應傳入的

在形參前使用*表示該形參是可變參數,可以接受多個實參(包括0個),收集多個實參為一個tuple,不能進行更改

在形參前使用**符號,表示可以接收多個關鍵字參數,收集的實參名稱和值組成一個字典

如果在一個星號參數后,或者一個位置可變參數后,出現的普通參數,實際上已經不是普通參數了,而是keyword-only參數,args可以看作已經截獲了所有的位置參數,普通參數不使用關鍵字參數就不可能拿到實參

參數列表的一般順序是,普通參數,缺省參數,可變位置參數,keyword-only參數(可帶缺省值),可變關鍵字參數

參數解構:給函數提供實參的時候,可以在集合類型前使用*或者**,把集合類型的結構解開,提取出所有元素作為函數的實參,非字典類型使用*解構成位置參數,字典類型使用**解構成關鍵字參數,提取出來的元素數目要和參數的要求匹配,也要和參數的類型匹配

def fn(x, y, z=3, *arg, m=4, n, **kwargs):

 

匿名函數

匿名函數,即沒有名字的函數,借助lambda表達式構建匿名函數

格式:? lambda參數列表:表達式

參數列表不需要小括號,冒號是用來分割參數列表和表達式的,不需要使用return,表達式的值,就是匿名函數的返回值,lambda表達式(匿名函數)只能寫在一行上,稱為單行函數

print((lambda *args: (x for x in args))(*range(5)))

 

生成器

列表解析式:返回值for元素in可迭代對象if條件,使用中括號[ ],內部是for循環,if條件語句可選,返回一個新的列表

生成器表達式:返回值for元素in可迭代對象if條件,列表解析式的中括號換成小括號就行了,返回一個生成器

集合解析式:返回值for元素in可迭代對象if條件,列表解析式的中括號換成大括號{}就行了,立即返回一個集合

字典解析式:返回值for元素in可迭代對象if條件,列表解析式的中括號換成大括號{}就行了,使用key:value形式,立即返回一個字典

 

生成器表達式:只需將列表解析式中的[ ]換位()即可,延遲計算,惰性求值,列表解析式立即返回結果

生成器為可迭代對象,迭代器,迭代器是可迭代對象,可迭代對象不一定是迭代器

迭代器不可從頭再走,不回頭,若為列表,可進行再次迭代,可回頭

生成器表達式省內存,列表解析式返回新的列表

生成器沒有數據,內存占用少,但是使用時候,雖一個個返回數據,但合起來所占內存差不多

迭代器未必是生成器

is可用來看地址是否相同

 

 

?

 

 

 

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/96306

(0)
DrueDrue
上一篇 2018-04-16 09:14
下一篇 2018-04-16 10:22

相關推薦

  • python安裝失敗原因分析(未指定錯誤0x80072efd)

    python安裝時間很長,最終報錯未指定錯誤0x80072efd   原因分析: download dubugging symbols download debug binaries 這兩項需要聯網(外網),國內安裝會超時報錯。所以安裝時取消這兩項就可以安裝成功      

    2018-08-09
  • 函數執行過程和遞歸函數練習題

    函數執行過程和遞歸函數練習題

    2018-04-16
  • Python 部分知識點總結(二)

    此篇博客只是記錄第四周未掌握或不熟悉的知識點,用來加深印象。

    Python筆記 2018-03-30
  • Python 部分知識點總結(五)

    此篇博客只是記錄第七周未掌握或不熟悉的知識點,用來加深印象。

    Python筆記 2018-04-25
  • Ipython封裝解構

    IPython Shell命令 !command 執行shell命令 !ls -l , !touch a.txt file = !ls -l | grep py 魔術方法 使用%開頭的,IPython內置的特殊方法 %magic 格式 %開頭是line magic %% 開頭是cell magic,notebook的cell %alias 定義一個系統命令的…

    2018-04-09
  • StringIO

    StringIOio模塊中的類From io import StringIO內存中,開辟的一個文本模式的buffer,可以像文件對象一樣操作它當close方法被調用的時候,這個buffer會被釋放StringIO操作getvalue() 獲取全部內容。跟文件指針沒有關系from io import StringIO# 內存中構建sio = StringIO(…

    Python筆記 2018-05-07
欧美性久久久久