假设我有这两个功能:
def f1():
pass
def f2():
pass
如果我想随机运行这两个函数中的一个,我可以这样做:
flist = (f1, f2)
function = random.choice(flist)()
Unfortunatley,当我想测试使用if语句的函数时......
if function == f1:
print "Good"
Good
未输出。为什么呢?
答案 0 :(得分:1)
在不知道函数是什么或者你想要做什么的情况下,我只是将它们作为字符串来说明如何使用random.choice并比较值。
import random
list_thing = ["function1", "function2"]
var = random.choice(list_thing)
if var == "function1":
print "var is equal function1"
elif var == "function2":
print "var is equal to function12"
答案 1 :(得分:1)
正如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