當調查我的其他問題時,我遇到了一個非常奇怪的行爲。將`filter object`投射到`list`清除其內容
運行代碼:
def test(prefix, custom_meta_files = []):
postfix = 'tgz'
if prefix[-1] != '.':
postfix = '.tgz'
archive = tarfile.open(prefix+postfix, "w:gz")
files = filter(lambda path: path.startswith(prefix), os.listdir())
print('files: {0}'.format(list(files)))
print('files: {0}'.format(list(files)))
files: ['ga_run.seq_niche.N30.1.bt0_5K.params', 'ga_run.seq_niche.N30.1.bt0_5K.stats', 'ga_run.seq_niche.N30.1.bt0_5K.tgz']
files: []
好像鑄造filter object
到list
將其清除。爲什麼這樣,是否是理想的?
所以我說得對。即使本質上與我的相同,我也會接受你的答案,但是我不想因爲我在1分鐘前寫了這兩天而等待兩天。我也認爲我可以保存並重用。起初,我認爲過濾器會返回一個更像'list'的持久對象,而不是一個生成器。感謝您的確認! – luk32