關於生成器,列表表示式的面試題

2022-09-21 20:00:29 字數 1134 閱讀 8373

#

func = lambda : x (lambda相當於函式名)

v = [lambda :x for x in range(10)]

#[func0, func1, func2, ..., func9]

#只要這樣寫,在記憶體中已經定格在9值

#雖然lambda函式還沒執行,但是range已經執行完了,x在記憶體裡已經是9了

print

(v)print

(v[0])

print

(v[0]())

'''[.at 0x000001915cbd51e0>, .at 0x000001915cbd5840>, .at 0x000001915cbd57b8>, .at 0x000001915cbd58c8>, .at 0x000001915cbd5950>, .at 0x000001915cbd59d8>, .at 0x000001915cbd5a60>, .at 0x000001915cbd5ae8>, .at 0x000001915cbd5b70>, .at 0x000001915cbd5bf8>]

.at 0x000001915cbd51e0>

9'''

#對於自定義函式內的迴圈,range只執行了一次,所以值也在0

deffunc():

for i in range(10):

return

iprint

(func)

print

(func())

'''0

'''

v = (lambda : x for x in range(10))

print(v) #

生成器位址

#生成器不能按索引取值

#print(v[0]) #typeerror: 'generator' object is not subscriptable

#print(v[0]())

print(next(v)) #

第乙個函式的記憶體位址

print(next(v)()) #

1 ,next一下執行一下

'''at 0x00000249f6c61e60>

.at 0x00000249f67a2ea0>

1'''

對生成器表示式及列表表示式使用zip的注意事項

在python資料處理中,zip和列表表示式 list comprehensions 都是常用的操作。但當兩者結合在一起時,若對zip函式不熟悉則容易出錯 array list np.arange 10 np.arange 10 zip comp zip a for a in array list ...

生成器表示式

生成器 生成器本質是迭代器,允許自定義邏輯的迭代器 迭代器和生成器區別 迭代器本身是系統內建的.重寫不了.而生成器是使用者自定義的,可以重寫迭代邏輯 生成器可以用兩種方式建立 1 生成器表示式 裡面是推導式,外面用圓括號 2 生成器函式 用def定義,裡面含有yield 1 生成器表示式 gener...

生成器 表示式

1.什麼是生成器?生成的工具。生成器是乙個 自定義 的迭代器,本質上是乙個迭代器。2.如何實現生成器但凡在函式內部定義了的yield,呼叫函式時,函式體 不會執行,會返回乙個結果,該結果就是乙個生成器。yield 每一次yield都會往生成器物件中新增乙個值。yield只能在函式內部定義 yield...