你在這裏做什麼不是定義for循環的實際方法。你使用的是列表理解。
什麼是列表理解?
列表理解用於快速等價循環的值。例如:
x = []
for i in range(10):
if i % 2 == 0:
x.append(i)
等同於:
x = [i for i in range(10) if i % 2 == 0]
雙方將給出值:
>>> x
[0, 2, 4, 6, 8]
好吧......那麼如何for循環定義?
for循環的定義在語句的開頭使用for
關鍵字,而不是語句的延續。正如你可以在上面看到,您的代碼可以轉換成類似:
# ...
names = []
for name in os.listdir(folder):
if not name.endswith('bin.png') if not name.endswith('.jpg') if not name.endswith('.nrm.png'):
names.append(check_image_size(os.path.join(folder, name)))
現在,你會看到,你可以保持相同的縮進級別check_image_size(os.path.join(folder, name))
後,加入更多行:
# ...
names = []
for name in os.listdir(folder):
if not name.endswith('bin.png') if not name.endswith('.jpg') if not name.endswith('.nrm.png'):
names.append(check_image_size(os.path.join(folder, name)))
# Add more things here
my_other_function_to_run(x)
more_other_functions(y)
我代碼仍然無法運行!
這是因爲在if
語句中不能有多於一個if
。使用and
來表示嚴格的真實關係。
# ...
names = []
for name in os.listdir(folder):
if not name.endswith('bin.png') and not name.endswith('.jpg') and not name.endswith('.nrm.png'):
names.append(check_image_size(os.path.join(folder, name)))
# Add more things here
my_other_function_to_run(x)
more_other_functions(y)
當然,你可以做嵌套if
報表,但他們是不是很漂亮:
# ...
names = []
for name in os.listdir(folder):
if not name.endswith('bin.png')
if not name.endswith('.jpg')
if not name.endswith('.nrm.png'):
names.append(check_image_size(os.path.join(folder, name)))
# Add more things here
my_other_function_to_run(x)
more_other_functions(y)
最後一個音符
正如我前面所說,你不應該有一個以上的if
聲明中的if
關鍵字。這同樣適用於列表理解。所以你的原代碼應該是:
# ...
names = [check_image_size(os.path.join(folder, name))
for name in os.listdir(folder)
if not name.endswith('bin.png')
and not name.endswith('.jpg')
and not name.endswith('.nrm.png')
]
好吧,但有關調用for循環內的多個函數的任何想法。我很感謝你的迴應。 –
@AnayBose看我最近的編輯。 –