1. 程式人生 > >【Python 學習筆記】各種生成器

【Python 學習筆記】各種生成器

【列表生成式】

例:

d = {'x': 'A', 'y': 'B', 'z': 'C' }
[k + '=' + v for k, v in d.items()]

['y=B', 'x=A', 'z=C']

例:在生成時使用函式
L = ['Hello', 'World', 'IBM', 'Apple']
[s.lower() for s in L]

['hello', 'world', 'ibm', 'apple']
例:還可以在迴圈裡使用函式
L1 = ['Hello', 'World', 18, 'Apple', None]
L2=[s.lower() for s in L1 if isinstance(s,str)]
print(L2)

['hello', 'world', 'apple']


【生成器(generator)】

1. 列表生成式可以通過將列表生成式的 “ [ ” 、“] ” 改成“()” ,以此來形成一個生成器(generator)。

例:

g = (x * x for x in range(10))
此時的 g 就是一個生成器(generator),生成器儲存的是演算法,所以可以使用 next(g) 來逐個顯示這個生成器的序列,但是更常使用的是 for 迴圈:“ for n in g:”

2. 生成器也可以有自己的演算法。

2.1. 用普通函式構造一個生成器

例:寫一個斐波拉契數列

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        print(b)
        a, b = b, a + b
        n = n + 1
    return 'done'
n 負責計數,max 負責輸出個數。

將它改造成一個生成器,只需要將 “ print(b) ” 改成 “ yield b ”。如果一個函式裡包含 yield ,那這個函式就是一個 generator。我們需要用呼叫 generator 的方式呼叫它。

2.2. 另外的例子

generator 和函式的執行流程不一樣,函式遇到 return 返回,generator 遇到 yield 返回,再次執行 next() 時,從上次 yield 的部分繼續。

例:

def odd():
    print('step 1')
    yield 1
    print('step 2')
    yield(3)
    print('step 3')
    yield(5)

這個 generator 在執行時:

o = odd()

next(o)

step 1
1

next(o)

step 2
3

next(o)

step 3
5

next(o)

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
在執行了三次之後,這個generator已經沒有繼續執行的演算法了,所以報錯。

2.3. generator 的呼叫

使用 for 迴圈迭代 generator 時會報錯。

【這部分先擱置,等學到了再補充。】


相關推薦

Python 學習筆記各種生成器

【列表生成式】 例: d = {'x': 'A', 'y': 'B', 'z': 'C' } [k + '=' + v for k, v in d.items()] ['y=B', 'x=A', 'z=C'] 例:在生成時使用函式 L = ['Hello', 'World

Python 學習筆記各種引數

動態語言好難啊。記一下重點。 【可變引數】可變引數使用 *p 來定義,這時候 p 是一個 tuple。傳入的時候可以直接傳入 f(1,2,3) 也可以使用 f(*tuple/list) 傳入一個可

python學習筆記33:生成器、迭代器、高階函式

生成器 生成器(generator)相比列表推導式,只佔用很小的空間,因為它是一邊迴圈一邊推算,通過next()呼叫下一元素,並在結束時丟擲StopIteration異常,在語法上只要把[]換成()即可

python學習筆記列表生成式和生成器

一、列表生成式 列表生成式即List Comprehensions,是Python內建的非常簡單卻強大的可以用來建立list的生成式。 列表生成式由包含一個表示式的括號組成,表示式後面跟隨一個for子句,之後可以有零或多個for或if子句。結果是一個列表,由表示

Python學習筆記-APP圖標顯示未讀消息數目

運行 讀取 lin 簡單實現 ets fcm 筆記 python語言 lte 以小米手機系統為例,當安裝的某個APP有未讀消息時,就會在該APP圖標的右上角顯示未讀消息的數目。本文主要解說怎樣用Python語言實現圖標顯示未讀消息的數目。首先,還是要用到Python中P

python學習筆記6.抽象

位置參數 name 默認參數 [] 順序 fun append 聲明 value 【python學習筆記】6.抽象 創建函數: 使用def語句定義函數,不用聲明參數類型,和返回值類型 def function_name(param1, param2):

Python學習筆記Coursera之PY4E學習筆記——File

color 學習筆記 函數 read mod rom stephen 內容 filename 1、打開文件 使用handle=open(filename,mode)打開文件。這一函數將會返回一個handle(應該翻譯為“柄”吧)用來操控文件,參數filename是一個字符串

Python學習筆記-冒泡排序、插入排序、二分法查找

判斷 tail fontsize watermark encoding middle 循環 itl 要求 原文出處:https://blog.csdn.net/yort2016/article/details/68065728 冒泡排序 主要是拿一個數與列表中所有的數進行比

Python學習筆記使用Python計算皮爾遜相關系數

自己 pre 求和 相關 學習筆記 python學習 tip urn pow 源代碼不記得是哪裏獲取的了,侵刪。此處博客僅作為自己筆記學習。 def multipl(a,b): sumofab=0.0 for i in range(len(a)):

Python學習筆記Coursera課程《Using Databases with Python》 密歇根大學 Charles Severance——Week1 Object Oriented Python課堂筆記

multi rac python3 什麽什麽 req cmd ket ascii碼 charles Coursera課程《Using Databases with Python》 密歇根大學 Charles Severance Week1 Object Oriented P

Python學習筆記有關包的基本知識

兩種 學習 eee 我們 模塊 組成 learn 目錄 welcome python的包(package)是一個有層次的文件目錄結構。它定義了一個由模塊和子包組成的Python應用程序執行環境。 AAA/ __init__.py bbb.py CCC

Python學習筆記Coursera課程《Using Python to Access Web Data》 密歇根大學 Charles Severance——Week6 JSON and the REST Architecture課堂筆記

學習 except for num string net none input 網上 Coursera課程《Using Python to Access Web Data》 密歇根大學 Week6 JSON and the REST Architecture 13.5 Ja

Python學習筆記調整matplotlib的圖例legend的位置

有時預設的圖例位置不符合我們的需要,那麼我們可以使用下面的程式碼對legend位置進行調整。 plt.legend(loc='String or Number', bbox_to_anchor=(num1, num2)) 其中,第一個引數loc,設定它可以遵循以下的表格 Stri

python學習筆記切片方法

1、切片說明和簡單用法 python提供了一個切片功能,用這種方法可以很簡單的獲取列表或者元組等的某幾個元素,切片返回的結果的型別和被切片的是保持一致的;基本用法如下: >>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Ja

python學習筆記set集合

1、集合說明 集合(set)是一個無序不重複元素的集。基本功能包括關係測試和消除重複元素。集合物件還支援 union(聯合),intersection(交),difference(差)和 sysmmetric difference(對稱差集)等數學運算。 2、建立一個集合 大括號

python學習筆記python字典(dict)

1、字典dict的建立 Python內建了字典:dict的支援,dict全稱dictionary,在其他語言中也稱為map,使用鍵-值(key-value)儲存,具有極快的查詢速度。注意字典內各個部分是沒有順序的區別的; 其java的map是一樣的,屬於key:value模式,一個簡單的

Python學習筆記python元組

python的元組(tuple)和列表(list)類似,是一個有序的列表,區別在於tuple是不能修改的,其初始化方式如下: >>> classmates = ('Michael', 'Bob', 'Tracy') 現在,classmates這個tuple不能變了

python學習筆記lambda表示式

在python中lambda關鍵字用於建立短小的匿名函式,Lambda 形式可以用於任何需要的函式物件。出於語法限制,它們只能有一個單獨的表示式。標準正規化為lambda [parameter_list]: expression,即lambda 引數列表:表示式; 這裡是個最簡單的用法範例:

python學習筆記python函式定義和傳參方法說明

一、函式定義方式 函式定義用關鍵字def,其引數傳遞不用設定型別,也不用定義返回,然後在函式名稱後加上:號,這點和java很不一樣,相對來說更加簡單了;另外包含關係上用四個空格來標識,而非java的;號; 如下為一個範例,定義了一個函式用來生成任意上界的菲波那契數列: # -*- c

python學習筆記range()方法使用

一、方法說明 range方法還有兩個方法,如下圖所示 上圖中第二個方法的step是可選引數,[]代表可選 如下為用法介紹 1、rang(n) range(n)方法會生成一個數字列表,其從0開始到n結束(不包括n),包含n個元素,步進為1,譬如: >>> r