我想问一下,是否有一种优雅的Pythonic方法,在第一次循环迭代时执行某个函数。 我能想到的唯一可能性是:
first = True
for member in something.get():
if first:
root.copy(member)
first = False
else:
somewhereElse.copy(member)
foo(member)
我不懂Python,但我使用的模式与你的示例几乎完全相同。
我还会将if
条件设置为最频繁的,通常检查if(first == false)
为什么?对于长循环,first只有第一次为true,其余时间都为false,这意味着在除了第一次之外的所有循环中,程序将检查条件并跳转到else部分。
通过检查first是否为false,只会有一个跳转到else部分。我真的不知道这是否会增加效率,但我仍然这样做,只是为了让我的内心宅男感到平静。
PS:是的,我知道当进入if部分时,它也必须跳过else才能继续执行,所以可能我的做法是无用的,但感觉很好。:D
你的问题有矛盾之处。你说 "只在第一次迭代上执行某些操作",但实际上你是想说在第一次/后续迭代上执行不同的操作。以下是我的建议:
copyfn = root.copy
for member in something.get():
copyfn(member)
foo(member)
copyfn = somewhereElse.copy
这是对我有效的方法
dup_count = 0
for x in reversed(dup_list):
dup_count += 1
if dup_count == 1:
print("First obj {}: {}".format(dup_count,x))
else:
print("Object # {}: {}".format( dup_count,x ))
使用一个只运行一次并适当替换自身的助手:
def copy(member):
root.copy(member)
global copy
copy = somewhereElse.copy
for member in something.get():
copy(member)
foo(member)
global
替换为nonlocal
。)