003 生成器 迭代器

2022-03-23 22:52:25 字數 2420 閱讀 3471

現在有個需求,列表[1, 2, 3, 4, 5, 6, 7, 8, 9],將列表裡的每個值加1。

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]

b =

for item in a:

a = b

print(a)

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]

for index, ele in enumerate(a, 0):

a[index] += 1

print(a)

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]

a = list(map(lambda x:x+1,a))

print(a)

a = [1, 2, 3, 4, 5, 6, 7, 8, 9]

print([i + 1 for i in a])

print('\n'.join([''.join(['%d * %d = %-3d' % (i, j, i * j) for j in range(1, i + 1)]) for i in range(1, 10)]))
g = (i for i in range(5))

print(type(g),g.next())

# 使用next()取值

g = (i for i in range(5))

print(type(g))

print('開始取值')

print(next(g))

print(next(g))

print(next(g))

print(next(g))

print(next(g))

# print(next(g)) # 報錯:stopiteration,因為取不到值了

# 基本上不會使用next(),正確應該使用for迴圈。而且還不需要擔心會報錯。拿不到函式return返回值

g = (i for i in range(10))

for i in g:

print(i)

# 斐波拉契:1 1 2 3 5 8 13 21

def fbi(num):

n, a, b = 0, 0, 1

while n < num:

yield b # # 到這停止,可以理解為凍結當前**。並且,把值返回給外面的next()

print(a, b)

a, b = b, a + b

n += 1

for i in fbi(2):

print(i)

函式加了yield之後

深入

# 生成器send,相當於喚醒。

def work(n):

count = 0

while count < n:

count += 1

sign = yield count

print('sign的值:',sign)

if not sign:

yield count + 2

new_range = work(4)

# res = next(new_range) # 開始第一次取值 拿到乙個1

# print(res) # 1

# res1 = new_range.send(true) # 第二次取值 傳送乙個true 函式遇到true 迴圈

# print(res1) # 2

# res2 = new_range.send(false) # 第三次取值 n=3

# print(res2)

這些型別稱為可迭代物件:iterable

from collections import iterable

print(isinstance(,iterable))

print(isinstance('',iterable))

print(isinstance({},iterable))

print(isinstance(set(),iterable))

print(isinstance((i for i in range(2)),iterable))

生成器不僅可以作用域for還可以被next()不斷取值,直到沒有資料可取

from collections import iterator

print(isinstance((i for i in range(2)),iterator))

Python筆記003 生成器和生成器表示式

以下是我學習 流暢的python 後的個人筆記,現在拿出來和大家共享,希望能幫到各位python學習者。生成器使用yield做關鍵字,一次只返回乙個值給呼叫者,然後暫停執行,其作用是 節省記憶體空間。生成器可以用next 函式,也可以用for迭代的方式獲取元素值,中間還可以用close 來隨時終止生...

Python(五)生成器 迭代器

一 生成器 求平方 傳統方法 浪費時間 square table for i in range 10000 for i in range 10 print square table i 生成器 到使用的時候才做真正的計算,節省時間和空間 square generator x x for x in r...

生成器 迭代器

最近見天一直在看廖大的python教程,卻發現很多基礎看著很簡單,但卻不會應用,歸根結底還是因為理解不到位,故而又將教程學了一遍,並將自己的理解記錄一下,也方便後面查閱。由於沒有相關程式設計基礎,有些理解可能是錯的,敬請批評指正。想深入具體學習廖大部落格請移步廖雪峰的官方 有時候用迴圈生成列表太過繁...