您好,登錄后才能下訂單哦!
Python yield語法的使用分析,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
# 例一開始: --------------------------------------------------------------------------------------------------------------------- def test_yield1(): print 'I am make test_yield1 function as a iterator...' yield
#直接調用test_yield1() test_yield1() #沒有輸出結果,原因是執行test_yield1()函數只是構造了一個迭代器, # 相當于只寫了個for循環,沒有寫for循環的代碼邏輯 # 迭代方法1: for i in test_yield1(): pass #發現有輸出了,這是因為test_yield1函數中有yield字段,因此test_yield1函數變成了一個 # 可迭代的生成器constructor,所以用迭代的方法能使之輸出結果。 # 迭代方法2: it = test_yield1() it.next() 迭代方法1、迭代方法2的執行結果都一樣:
#但是使用下面方式則會報錯 it = test_yield1() it.next() it.next()
#報錯StopIteration,這是因此yield只構造了一次迭代對象,所以執行第二次時候,已經沒有可迭代的元素了,所以報錯 # 例一結束:--------------------------------------------------------------------------------------------------------------------- |
# 例二開始:--------------------------------------------------------------------------------------------------------------------- #接上面例一,制造一個二次迭代的函數對象: def test_yield2(): print 'I am test_yield2 and execute once yiled...' yield print 'I am test_yield2 and execute twice yiled...' yield #直接執行一樣沒有輸出 test_yield2() # 迭代方法1: for i in test_yield2(): pass # 迭代方法2: t = test_yield2() t.next() t.next()
迭代方法1、迭代方法2的執行結果都一樣:
# 例二結束:--------------------------------------------------------------------------------------------------------------------- |
從上述例一、例二可以知道,函數中若有yield則該函數會被特地編譯成生成器、函數就是一個可以供迭代使用的對象。
下面來看一個openstack中使用的實例編程的例子:
初看不是很好理解,接下來,模擬一個demo:
#coding=utf-8 # 例三開始:--------------------------------------------------------------------------------------------------------------------- def test_yield3(num_list): for num in num_list: if num%2 == 0: yield num
num_list = [1,2,3,4,5,6] t = test_yield3(num_list)
print t
for i in t: print i
結果:
# 例三結束:--------------------------------------------------------------------------------------------------------------------- |
例三通過yield語法,返回了一個只包含偶數的可迭代生成器對象。因此關于openstack中的例子也很容易理解,
就是將self._filter_one(obj, filter_properties)值為true的obj加入到迭代對象中。這樣就完成了對hosts的過濾。
看完上述內容,你們掌握 Python yield語法的使用分析的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。