少說話多寫程式碼之Python學習052——類的成員(實現生成器)
前面我們知道類中定義__iter__可以實現迭代器,我們再看看另一個概念,叫生成器。生成器和迭代器是Python中近幾年引入的顯著地兩個特性。
生成器是用普通的函式語法定義的迭代器。
又這樣一個數組:sequen=[[1,2],[3,4],[5]]。我們要按順序打印出來,
def flatten(seq):
for list in seq:
for item in list:
yield item
程式碼中,yield是一個新的語句,函式中包含了yield語句,則該函式稱之為生成器。使用yield每次產生一個值,函式就被凍結,函式停在這個點直到被重新喚醒後從該點繼續執行。
看看呼叫
sequen=[[1,2],[3,4],[5]]
for item in flatten(sequen):
print(item)
輸出
1
2
3
4
5
也可以這樣使用
print(list(flatten(sequen)))
輸出
[1, 2, 3, 4, 5]
工程檔案下載:https://download.csdn.net/download/yysyangyangyangshan/10821883
相關推薦
少說話多寫程式碼之Python學習040——類02(類的函式和方法 )
在類裡定義函式時的self引數,其實是方法和函式的區別。在類裡定義方法時,一般都在方法里加一個預設的引數,可以是,a,c,d的。但是約定俗成就統一叫self。self表示的是 這個類的當前例項,一個類有多個例項,那麼它屬於自己所屬於的例項,不會存在例項寧缺的self會指向例項陳皮皮。 這裡比價特
少說話多寫程式碼之Python學習039——類01(如何定義類 )
在我們使用的面嚮物件語言中,類是一個基礎單元;一個超級程式工程,其基本組成也是類。Python中如何定義一個類,我們來看看, class Person: def setName(self,name): self
少說話多寫程式碼之Python學習041——類03(類名稱空間 )
先看兩個函式,實現一個數的平方。 def squarter(x): return x*x squarter2 = lambda x: x*x print(squarter(9)) print(squarter2(8)) 輸出 8
少說話多寫程式碼之Python學習042——類04(超類 )
來看看Python中類的繼承。被繼承的類稱作超類。 先看一個類,定義了一個Student類,有兩個屬性和三個方法。 class Student: name='學生' school='學校' def init(
少說話多寫程式碼之Python學習045——類07(異常)
異常是程式遇到錯誤了,這種錯誤有的是已知的,可預判的。有些是未知的,莫名其妙的。 比如, s=1/0 print(s) 輸出 Traceback (most recent call last): File "D:/work/Python/Class7.py", line
少說話多寫程式碼之Python學習044——類06(多繼承)
關於繼承最麻煩的就是多繼承,而Python是支援多繼承的。也就是說一個子類可能有兩個以上的父類。 比如,如下程式碼,子類繼承了兩個類,父類的方法在子類中都可以呼叫。 class Programer: language='二進位制' de
少說話多寫程式碼之Python學習043——類05(檢查繼承關係)
Python中還可以檢查類的繼承的關係。 比如,如下兩個類,PrimaryBaLinghouStudent繼承了BaLinghouStudent。 class BaLinghouStudent: name='學生' school='學校
少說話多寫程式碼之Python學習052——類的成員(實現生成器)
前面我們知道類中定義__iter__可以實現迭代器,我們再看看另一個概念,叫生成器。生成器和迭代器是Python中近幾年引入的顯著地兩個特性。 生成器是用普通的函式語法定義的迭代器。 又這樣一個數組:sequen=[[1,2],[3,4],[5]]。我們要按順序打印出來, def flatt
少說話多寫程式碼之Python學習061——標準模組(time模組)
日期模組主要是處理日期的,可以實現獲取當前時間、操作時間和日期、將字串格式化為日期以及將日期格式化為字串。 主要函式有, asctime 將時間元組轉換為字元 localtime 將秒數轉換為日期元組, mktime 將時間元組轉換為本地時間 sleep 休眠 strptime 將字串解析為時間
少說話多寫程式碼之Python學習062——標準模組(random模組)
random主要是產生隨機數。不過實際上,不論哪種語言中所謂的隨機數,其實都不是真正意義的隨機數。random中的SystemRandom可以讓資料接近真正的隨機數。 我們通過下面的例子來看看隨機數的使用。 我們在一段時間內產生隨機時間。 from random import * from
少說話多寫程式碼之Python學習063——標準模組(shelve模組)
如果我們只需要存少量的資料,一個簡單的儲存方案是使用shelve模版。我們只需要給他提供一個指定路徑的檔名。shelve呼叫過程是, 先呼叫open函式,引數為檔名。返回值是一個shell物件。這個物件可以用來儲存資料,可以作為一個字典來操作,但是鍵一定是字串型別的。操作完成後呼叫close函式
少說話多寫程式碼之Python學習041——類03(類名稱空間 ).txt
先看兩個函式,實現一個數的平方。 def squarter(x): return x*x squarter2 = lambda x: x*x print(squarter(9)) pr
少說話多寫程式碼之Python學習065——標準模組(re模組)
Python的re模組主要是正則表示式的操作函式。我們看看主要的幾個函式。 首先我們要引入re模組。 import re compile將包含正則表示式字串建立為物件。 search在目標字串中按照給定的正則表示式匹配結果 match在字串的開始處匹配指定正則表示式 split根據正則表
少說話多寫程式碼之Python學習046——類的成員(建構函式)
建構函式是一個類裡比較特殊的函式,一般即時不寫建構函式,類也會預設有一個預設建構函式,比如像下面這樣的, __init__ 其實是一個預設建構函式。 class Book: bookName='書名' def __init
少說話多寫程式碼之Python學習048——類的成員(supper函式)
繼承父類的建構函式,前面我們在子類的建構函式中呼叫:父類__init__(self),呼叫父類的建構函式。這種做法稱之為繫結未繫結的父類建構函式。在Python3.0中可以使用supper函式 實現繼承父類建構函式。 _metaclass_=type class Bird: &
少說話多寫程式碼之Python學習047——類的成員(呼叫父類建構函式)
前面我們知道了在Python中如何繼承。我們看下面的繼承關係,Bird類有一個eat方法。BigBird繼承了Bird,並且新增了sing方法。 class Bird: def __init__(self):
少說話多寫程式碼之Python學習049——類的成員(property函式)
如果要訪問類中的私有變數,根據面向物件原則,是不能直接訪問的,這裡有一個訪問器的概念。將私有變數進行封裝,公佈出訪問的方法。比如下面這樣, 一個矩形型別,設定大小,然後獲取大小。 class Rectangle: def __init__(
少說話多寫程式碼之Python學習050——類的成員(靜態方法,類成員方法,getattr,setattr)
我們在訪問類的欄位時,還有一些過濾的條件,類似於前端語言比如vue Js、anjularJs中過濾器的概念。在3.0以前可以使用比如,__setattr__,__getattr__的方法進行屬性的過濾。在3.0以後我們如果對某些欄位需要過濾訪問,也可以使用這些函式。 class Rectan
少說話多寫程式碼之Python學習051——類的成員(實現迭代器)
在Python類中,實現迭代器,要定義這個方法,__iter__。這個方法返回一個迭代器,其實質是帶有一個next方法的物件。為形象起見,我們定義一個斐波那契數列類。如下, class MyFibs: def __init__(self): &nb
少說話多寫程式碼之Python學習053——類的成員(生成器的使用:遞迴)
前面我們get到了一個技能,生成器。 那麼如果我們想依次輸出一個數組,但是陣列中又巢狀陣列,又巢狀陣列...巢狀未知層,那麼如何實現?如果使用for可能就有點不方便了,這時我們需要遞迴。 我們可以這樣做, def myFlatten(seq): try: &nbs