Python 若调用了语句,即使条件已满足,也忽略

Python 若调用了语句,即使条件已满足,也忽略,python,Python,我的代码中有一个简单的if语句 if len(bootstrap_node_list_recieved_no_dups) >= min_node_to_complete_boot_strap: print "recieved required nodes" 基本上,我想知道是否有足够的节点,我只希望这种情况发生一次,因为代码仍然会继续运行并重复运行,所以当前,正如我所期望的,每次都会运行这个if语句 是否有一种方法可以对其进行编码,使if语句运行,但一旦完成,就再也不会运行了 由

我的代码中有一个简单的if语句

if len(bootstrap_node_list_recieved_no_dups) >= min_node_to_complete_boot_strap:
    print "recieved required nodes"
基本上,我想知道是否有足够的节点,我只希望这种情况发生一次,因为代码仍然会继续运行并重复运行,所以当前,正如我所期望的,每次都会运行这个if语句

是否有一种方法可以对其进行编码,使if语句运行,但一旦完成,就再也不会运行了

由于输入不是常量,因此需要
=

我希望这是清楚的,因为这有点难以描述

更新

我曾试图实施这些建议,但却发现了错误

UnboundLocalError: local variable 'flag' referenced before assignment
完整代码如下:

flag = False

def number_of_duplicates_in_list():
    number_recieved = len(bootstrap_node_list_recieved)
    bootstrap_node_list_recieved_before = len(bootstrap_node_list_recieved_no_dups)

    " this method works in O(n^2) time and is thus very slow on large lists"
    for i in bootstrap_node_list_recieved:
        if i not in bootstrap_node_list_recieved_no_dups:
            bootstrap_node_list_recieved_no_dups.append(i)
    assert len(bootstrap_node_list_recieved_no_dups) >= bootstrap_node_list_recieved_before
    if  len(bootstrap_node_list_recieved_no_dups) >= min_node_to_complete_boot_strap  and flag is False:
        print "recieved required nodes"
        flag = True

当第一次触发
if
语句时,可能会更改某些标记变量。下面的代码是一个最简单的示例,它只会打印一次“Triggered”语句,即使如果没有检查标志,则3以上的所有数字都会触发该语句

flag = False

for x in xrange(10):
    if x > 3 and flag is False:
        print 'Triggered'
        flag = True

    # Do something else
如果要在函数中执行此操作,还需要将标志初始化移到函数中。请注意,重新运行该功能将重置标志:

def test_func():
    flag = False
    for x in xrange(10):
        if x > 3 and flag is False:
            print 'Triggered'
            flag = True

    # Do something else

test_func()
为了能够多次运行函数,但只触发
if
语句并更改标志一次,您需要将标志链接到函数调用。执行此操作的一个简单方法是在每次调用时传递并返回标志:

flag = False

def test_func(flag):
    for x in xrange(10):
        if x > 3 and flag is False:
            print 'Triggered'
            flag = True

    # Do something else
    return flag

flag = test_func(flag)
flag = test_func(flag)
这里,该标志在函数外部定义,并在调用时传递给每个函数。如果未触发,它将通过而不发生更改。如果被触发,它将被更改,其状态将传回函数外部


其他方法可以是定义一个
global
变量,或者使用标志作为对象变量构建一个类,并通过
self
flag
定义为列表中重复数量内的全局。否则,您只能读取它。

如果尚未运行并且len(…):尚未运行=False…?谢谢,我尝试过这种方法,但一直没有绑定LocalError:在分配之前引用了局部变量“flag”。根据您的要求,IV使用两种解决方案更新了答案