假设我具有以下两个功能:
def f1():
pass
def f2():
pass
如果我想随机运行这两个功能之一,则可以执行以下操作:
flist = (f1, f2)
function = random.choice(flist)()
不幸的是,当我想使用if语句测试哪个功能时...
if function == f1:
print "Good"
Good
不输出。为什么?
正如roippi所说,您的两个代码块在中存储了不同的值var
。在第一个版本中,您将存储所选的函数var
(当使用调用时var()
,将放弃返回值)。在第二个块中,选择函数后立即调用该函数,并为其var
分配了函数的返回值(这可能会使与函数的比较无效)。
第二个代码块等效于第一个代码块的修改后的版本:
list_thing = [function1, function2]
var = random.choice(list_thing)
var2 = var() # call the chosen function, and save its return value as var2
if var2 == function1: # compare against var2, rather than var here
#Do something
elif var2 == function2: # here too
#Do something else
除非您的函数可能返回自己(或彼此返回),否则代码的第二版可能不是您想要的。不知道函数的作用或#Do something
块的含义,要说出应该做什么并不容易。我想一种替代方法是将函数调用与# something
另一个函数一起包装,然后在包装器函数之间进行选择:
def function1_and_something():
function1()
#Do something
def function2_and_something_else():
function2()
#Do something else
random.choice([function1_and_something, function2_and_something_else])() # chose and call
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句