Python 若调用了语句,即使条件已满足,也忽略
我的代码中有一个简单的if语句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 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使用两种解决方案更新了答案