Python之生成器妙用

2021-08-04 19:31:13 字數 1515 閱讀 8904

將所有資料夾下所有帶『root』字元檔案的路徑列印輸出:
# 

階段一:遞迴找檔案路徑,把路徑發給階段二

import os

def

init(func):

def

res = func(*args, **kwargs)

res.__next__()

return res

@init

def

get_file_path(target):

while

1: filepath = yield

g = os.walk(filepath)

for par_path, _, files in g:

for file in files:

target.send(r'%s\%s' % (par_path, file))

# 階段二:收到檔案路徑,開啟檔案獲取物件,把檔案物件發給階段三

@init

def

get_f(target):

while

1: path = yield

with

open(path,

'r',

encoding='utf-8') as f:

target.send((path, f))

# 階段三:收到檔案物件,

for迴圈讀取檔案的每一行內容,把每一行內容發給階段四

@init

def

get_line(t):

while

1: path, f = yield

for line in f:

res = t.send((path, line))

if res:

break

# 階段四:收到一行內容,判斷

root

在這一行內容中,如果在則把檔名發給階段五

@init

def

judge_pattern(t, pattern):

tag = false

while

1: path, line = yield tag

tag = false

if pattern in line:

t.send(path)

tag = true

# 階段五:收到檔名,列印結果

@init

def

print_tool():

while

1: path = yield

print(path)

filepath = r'd:\users\quincy_c\pycharmprojects\s6'

g = get_file_path(get_f(get_line(judge_pattern(print_tool(),

'root'))))

g.send(filepath)

python之生成器

使用生成器表示式取代列表解析可以同時節省cpu 和 記憶體 ram 如果你構造乙個列表的目的僅僅是傳遞給別的函式,比如 傳遞給tuple 或者set 用生成器表示式替代吧 def ord map a string for c in a string yield ord c gen ord map u...

python之生成器

先來介紹下迭代器 迭代器即迭代取值的工具 迭代 的意思就是重複的基於上一次的結果取值 迭代器可以不依賴索引取值 取值 取乙個值就會少乙個,取完了,還取值就會報錯 1.什麼是生成器 在函式內但凡出現yield關鍵字,在呼叫函式就不會執行函式內 會返回乙個迭代器物件的值,該值稱之為生成器 強調 生成器的...

Python之生成器

通過列表生成式,我們可以產生列表,但是列表容量肯定有限,如果建立乙個很大的列表元素,要占用大量的記憶體空間,如果我們只要列表前面的元素,則後面的儲存空間大大浪費,這時候我們需要引出python生成器,這樣就必要建立完整的列表,從而大大節省空間,我們稱之為 generator.建立生成器方法一 使用 ...