1. 程式人生 > >python--高級特性

python--高級特性

python 生成器

*************** 高級特性 *****************

  1. 叠代
    可以通過 for 循環來遍歷這個 list 或 tuple,這種遍歷我們稱為叠代(Iteration)只要是可叠代對象,無論有無下標,都可以叠代,比如 dict就可以叠代:
    默認情況下,dict 叠代的是 key。如果要叠代 value,怎麽辦?
    for k,v in d.iteritems():
    print k,v

    技術分享



    ★判斷一個對象是可叠代對象,方法是通過 collections 模塊的 Iterable 類型判斷

    ★判斷數據類型是否為可叠代數據類型:字符串,列表,集合,字典,元組是可叠代的,整型數字是不可叠代的。

    技術分享



  2. 列表生成式

    列表生成式是Python 內置的非常簡單卻強大的可以用來創建 list的生成式

    - 生成100以內所有偶數的平方;

    技術分享
    - 生成‘ABC’與‘123’的全排列;

    技術分享

    - 列出當前目錄下的所有文件和目錄名; <參考:os.listdir(".")>
    技術分享
    - 生成字典的的內容,格式為‘key=value’,返回其列表格式;

    技術分享
    - 將list中所有的字符串變為小寫字母 <參考:s.lower()>


    技術分享

    枚舉法引用變量:(enumerate)

    技術分享

    fou循環引用變量:

    技術分享

  3. 生成器

    通過列表生成式,我們可以直接創建一個列表,受到內存限制,列表容量肯定是有限的;創建一個包含 100 萬個元素的列表,占用很大的存儲空間;
    在循環的過程中不斷推算出後續的元素呢?這樣就不必創建完整的 list,從而節省大量的空間。在 Python 中,這種一邊循環一邊計算的機制,稱為生成器(Generator)


    怎麽創建生成器?把一個列表生成式的 [] 改成 ()
    使用g.next()方法依次讀取元素(麻煩)
    使用 for 循環(推薦)

    理解生成器的實質,當無法通過列表生成式表述問題時,如何通過函數實現生成式的功能。
    python編程:著名的斐波拉契數列(Fibonacci),除第一個和第二個數外,任意一個數都可由前兩個數相加得到:1, 1, 2, 3, 5, 8, 13, 21,...


    ★fib 函數定義了斐波拉契數列的推算規則,可以從第一個元素開始,推算出後續任意的元素,邏輯非常類似 generator。要把 fib 函數變成 generator,只需要把print b 改為 yield b 就可以.生成器
    ★函數順序執行,遇return語句或最後一行函數語句就返回。
    generator函數在每次調用next() 的時候執行,遇到 yield 語句返回,再次執行時從上次返回的yield 語句處繼續執行。

    技術分享



  4. [object Object]

    # 4). 手動實現生成器
    #定義一函數fib,實現斐波那契數列(Fibonicci):
    # 1, 1, 2, 3, 5, 8, 13, 21..........
    #
    # def fib(n):
    #
    # 執行:fib(3) 輸出:1,1,2
    # 執行:fib(4) 輸出:1,1,2,3

    技術分享

    # 5).通過yield實現單線程的並發運算
    # 異步I/O模型epoll http nginx tomcat
    技術分享

    程序:
    技術分享
測試;

[object Object]

python--高級特性