在發帖之前,我已經閱讀了以下內容:模塊級變量執行無法訪問的問題python 執行命令但我無法讓我的代碼運行。這是代碼:import stringarr = [0, 1, 2, 3, 4]required = 4red = ['0']alpha = string.printable[10:62]ss = ''it = len(arr) - required + 1for i in range(required): now = alpha[i] rd = '-'.join(red) ss += '\t' * (i + 1) + f'for {now} in range({it}-{rd}):\n' red.append(now)exec('def inner_reducer():\n' + ss + '\t' * (required + 1) + f'yield {red[-1]}')a = inner_reducer()print(a.__next__())print(a.__next__())print(a.__next__())print(a.__next__())arr我需要一個以和作為參數的生成器,而不是直接在全局范圍內編寫required,在分配給生成器后,調用__next__()以生成值。任何幫助都是值得贊賞的。
1 回答

一只萌萌小番薯
TA貢獻1795條經驗 獲得超7個贊
您可以使用工廠函數。例如
import string
def make_inner_reducer_function(arr, required):
? ? red = ['0']
? ? alpha = string.printable[10:62]
? ? ss = ''
? ? it = len(arr) - required + 1
? ? for i in range(required):
? ? ? ? now = alpha[i]
? ? ? ? rd = '-'.join(red)
? ? ? ? ss += '\t' * (i + 1) + f'for {now} in range({it}-{rd}):\n'
? ? ? ? red.append(now)
? ? exec('def inner_reducer():\n' + ss + '\t' * (required + 1) + f'yield {red[-1]}')
? ? return locals()['inner_reducer']
f = make_inner_reducer_function([0, 1, 2, 3, 4], 4)
a = f()
print(a.__next__())
print(a.__next__())
print(a.__next__())
print(a.__next__())
添加回答
舉報
0/150
提交
取消