从列表中随机选择功能并测试其功能时的奇怪行为

伊森·比林(Ethan Bierlein)

假设我具有以下两个功能:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

同时执行队列中对象的功能时的奇怪行为

来自分类Dev

“断言”功能:奇怪的行为

来自分类Dev

“断言”功能:奇怪的行为

来自分类Dev

从范围中选择随机整数时的奇怪行为

来自分类Dev

从python中的列表继承时的奇怪行为

来自分类Dev

奇怪的窗口功能行为

来自分类Dev

“读取”系统功能的奇怪行为

来自分类Dev

随机选择功能

来自分类Dev

随机选择功能

来自分类Dev

带有替换功能的JSON.stringify中的奇怪行为

来自分类Dev

功能速度测试的结果很奇怪

来自分类Dev

更改列表中列表的值时的奇怪行为

来自分类Dev

SQL Server的奇怪行为-随机选择

来自分类Dev

TestFX 中是否有测试选择框选择的功能?

来自分类Dev

基本功能的奇怪行为

来自分类Dev

Coffeescript和护照:奇怪的行为,附加功能

来自分类Dev

奇怪的行为存储功能导致OCaml

来自分类Dev

选择功能时出错

来自分类Dev

测试功能不在测试文件中时,mochajs referenceerror

来自分类Dev

R中列表的奇怪行为

来自分类Dev

如何测试从列表中随机选择一个元素?

来自分类Dev

呼吁java.lang.reflect.Proxy对象扩展功能时科特林奇怪的行为

来自分类Dev

Redmine中的功能测试?

来自分类Dev

在功能测试中无法选择选项值

来自分类Dev

在功能测试中无法选择选项值

来自分类Dev

React 多个复选框的行为很奇怪,在状态中添加了确认和取消功能

来自分类Dev

随机选择一个功能

来自分类Dev

如何随机选择一个功能?

来自分类Dev

gtkwave中奇怪的测试台行为