亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python3的生成器和迭代器代碼怎么寫

發布時間:2022-01-25 15:00:50 來源:億速云 閱讀:134 作者:iii 欄目:開發技術

本篇內容主要講解“Python3的生成器和迭代器代碼怎么寫”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python3的生成器和迭代器代碼怎么寫”吧!

1.生成器

# 一邊循環一邊計算的機制,稱為生成器:generator;
# 創建generator方法:
# 1.把一個列表生成式的[]改成()
numsList = [num * num for num in range(10)]
print("列表生成式生成numsList:",numsList)
numsGenerator = (num * num for num in range(10))
print("生成器生成numsGenerator:",numsGenerator)
# 使用next()函數獲得generator的下一個返回值
print("打印numsGenerator第一個元素:",next(numsGenerator))
print("打印numsGenerator第二個元素:",next(numsGenerator))
print("--------------------------------------------------------")
# 使用for循環打印generator元素
print("使用循環打印生成器中的元素!")
for num in numsGenerator:
    print(num,end = " ")
print("\n")
print("--------------------------------------------------------")
# 斐波拉契數列(Fibonacci):除第一個和第二個數外,任意一個數均可由前兩個數相加得到
# 1,1,2,3,5,8,13,21,34
def fibonacci(num):
    n, a, b = 0, 0, 1
    while n < num:
        print(b,end = "  ")
        a, b = b, a + b
        n = n + 1
    return "Done"

print("Fibonacci前10項為:")
fibonacci(10)
print("\n")
print("--------------------------------------------------------")
# 2.把fibonacci()函數變成generator函數
def fibonacci(num):
    n, a, b = 0, 0, 1
    while n < num:
        yield b
        a, b = b, a + b
        n = n + 1
    return "Done"

# Tips:
# 1.如果一個函數定義中包含yield關鍵字,則這個函數是一個generator函數;
# 2.調用一個generator函數將返回一個generator;
fib = fibonacci(10)
print("fib的值:",fib)

# 結果輸出:
列表生成式生成numsList: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
生成器生成numsGenerator: <generator object <genexpr> at 0x0000028F0E6ACB88>
打印numsGenerator第一個元素: 0
打印numsGenerator第二個元素: 1
--------------------------------------------------------
使用循環打印生成器中的元素!
4 9 16 25 36 49 64 81 

--------------------------------------------------------
Fibonacci前10項為:
1  1  2  3  5  8  13  21  34  55  

--------------------------------------------------------
fib的值: <generator object fibonacci at 0x0000028F0E7839A8>
 

# 普通函數和generator函數的執行流程:
# 1.普通函數:順序執行,遇到return語句或最后一行函數語句就返回;
# 2.generator函數:在每次調用next()的時候執行,遇到yield語句返回;
# 3.再次執行時從上次返回的yield語句處繼續執行;
# 實例:定義一個generator函數,依次返回"Willard",18,"Engineer"
def willardInfo():
    print("STEP1")
    yield "Willard"
    print("--------")
    print("STEP2")
    yield 18
    print("--------")
    print("STEP3")
    yield "Engineer"

# 調用willardInfo()這個generator函數,先生成一個generator對象
# 然后用next()函數不斷獲得下一個返回值,即可用循環直接打印
willardInfoObject = willardInfo()
for willard in willardInfoObject:
    print(willard)

# 結果輸出:
STEP1
Willard
--------
STEP2
18
--------
STEP3
Engineer
 

2.迭代器

# 可直接用于for循環的數據類型:
# 1.list、tuple、dict、set、str等;
# 2.generator,包括:生成器和帶yield的generator function;
# 3.可以直接作用于for循環的對象稱為可迭代對象:Iterable;
# 4.使用isinstance()判斷一個對象是否為Iterable對象;
from collections.abc import Iterable
print("判斷list是否為可迭代對象!",isinstance([],Iterable))
print("判斷dict是否為可迭代對象!",isinstance({},Iterable))
print("判斷str是否為可迭代對象!",isinstance("Willard",Iterable))
print("判斷生成式是否為可迭代對象!",isinstance((num for num in range(10)),Iterable))
print("判斷number是否為可迭代對象!",isinstance(99,Iterable))

# 結果輸出:
判斷list是否為可迭代對象! True
判斷dict是否為可迭代對象! True
判斷str是否為可迭代對象! True
判斷生成式是否為可迭代對象! True
判斷number是否為可迭代對象! False
 

# 可以被next()函數調用并不斷返回下一個值的對象稱為迭代器:Iterator
# 使用isinstance()判斷一個對象是否為Iterator對象;
from collections.abc import Iterator
print("判斷生成器是否為迭代器!",isinstance((num for num in range(10)),Iterator))
print("判斷list是否為迭代器!",isinstance([],Iterator))
print("判斷dict是否為迭代器!",isinstance({},Iterator))
print("判斷str是否為迭代器!",isinstance("Willard",Iterator))
print("----------------------------------------------------------")
# Tips:
# 1.生成器都是Iterator對象,但list、dict、str是Iterable但不是Iterator;
# 2.Iterator對象表示數據流,Iterator對象可以被next()函數調用并不斷返回下一個數據,
# 直到沒有數據時拋出StopIteration錯誤;這個數據流可以看作一個有序序列,
# 但不能提前知道序列的長度,只能不斷通過next()函數實現按需計算下一個數據,
# Iterator的計算是惰性的,只有在需要返回下一個數據時才計算;
# 3.使用iter()函數把list、dict、str變成Iterator;
print("使用iter()函數把list、dict、str變成Iterator.")
print("判斷list是否為迭代器!",isinstance(iter([]),Iterator))
print("判斷dict是否為迭代器!",isinstance(iter({}),Iterator))
print("判斷str是否為迭代器!",isinstance(iter("Willard"),Iterator))

# 結果輸出:
判斷生成器是否為迭代器! True
判斷list是否為迭代器! False
判斷dict是否為迭代器! False
判斷str是否為迭代器! False
----------------------------------------------------------
使用iter()函數把list、dict、str變成Iterator.
判斷list是否為迭代器! True
判斷dict是否為迭代器! True
判斷str是否為迭代器! True

到此,相信大家對“Python3的生成器和迭代器代碼怎么寫”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

白城市| 阿拉善盟| 松滋市| 阳原县| 娄底市| 土默特右旗| 龙门县| 石柱| 扶风县| 龙泉市| 宣威市| 休宁县| 渭南市| 沁源县| 奈曼旗| 平潭县| 三门县| 玉环县| 黑山县| 晋州市| 三原县| 应城市| 佛山市| 闽侯县| 新绛县| 三江| 洛浦县| 阳西县| 额尔古纳市| 葫芦岛市| 酒泉市| 扶沟县| 通渭县| 望奎县| 加查县| 高淳县| 柘城县| 惠水县| 永年县| 望江县| 洪江市|