"For"循环第一次迭代

98

我想问一下,是否有一种优雅的Pythonic方法,在第一次循环迭代时执行某个函数。 我能想到的唯一可能性是:

first = True
for member in something.get():
    if first:
        root.copy(member)
        first = False
    else:
        somewhereElse.copy(member)
    foo(member)
14个回答

1

我不懂Python,但我使用的模式与你的示例几乎完全相同。
我还会将if条件设置为最频繁的,通常检查if(first == false)
为什么?对于长循环,first只有第一次为true,其余时间都为false,这意味着在除了第一次之外的所有循环中,程序将检查条件并跳转到else部分。
通过检查first是否为false,只会有一个跳转到else部分。我真的不知道这是否会增加效率,但我仍然这样做,只是为了让我的内心宅男感到平静。

PS:是的,我知道当进入if部分时,它也必须跳过else才能继续执行,所以可能我的做法是无用的,但感觉很好。:D


0

你的问题有矛盾之处。你说 "只在第一次迭代上执行某些操作",但实际上你是想说在第一次/后续迭代上执行不同的操作。以下是我的建议:

copyfn = root.copy
for member in something.get():
    copyfn(member)
    foo(member)
    copyfn = somewhereElse.copy

0

这是对我有效的方法

    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  ))

0

使用一个只运行一次并适当替换自身的助手:

def copy(member):
    root.copy(member)
    global copy
    copy = somewhereElse.copy

for member in something.get():
    copy(member)
    foo(member)

(如果你的循环在一个函数内部,将global替换为nonlocal。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接