以下片段給出了我解壓縮t1, t2, t3或t1, t2取決于任務的意圖。我知道這樣if-else的for宣告不存在,但我想知道是否有解決方法。歡迎任何幫助或澄清問題。
def func(task, t1, t2, t3):
if task == 'abc': # t3=None for this case
for t1, t2 in zip(t1, t2):
// do something
else:
for t1, t2, t3 in zip(t1, t2, t3):
// do something
if task == 'abc':
t3 = None
func(task, t1, t2, t3)
有沒有辦法我們可以撰寫一個 for 回圈陳述句,然后根據task值解壓縮 for 回圈內的引數。問題是當第三個引數為 時None,它會拋出錯誤:TypeError: zip argument #3 must support iteration when task==abc . I want to have a common of do something`。
uj5u.com熱心網友回復:
用于itertools.repeat()提供默認的第三個串列,用于zip()生成默認值的連續流。
def func(task, a1, a2, a3 = None):
if a3 is None:
a3 = itertools.repeat(None)
for t1, t2, t3 in zip(a1, a2, a3):
// do someting
uj5u.com熱心網友回復:
不清楚您現有代碼的問題是什么,但您可以像這樣重新排列它:
def func(task, *args):
for items in zip(*args):
if task == "abc":
item1, item2 = items
# do something with them
else:
item1, item2, item3 = items
# do something with these
或這個:
def func(task, t1, t2, t3=None):
if task == "abc":
lists = [t1, t2]
else:
lists = [t1, t2, t3]
for items in zip(*lists):
#... as above
或者你可以使用一個不斷產生的迭代None作為默認引數:
from itertools import repeat
def func(task, t1, t2, t3=repeat(None)):
for item1, item2, item3 in zip(t1, t2, t3):
# Now item3 will always be None if t3 is not specified
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/523811.html
標籤:Pythonfor循环
