如何在python3中以字符串形式传递函数名

2024-09-29 23:21:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在测试一组函数,并希望得到要打印到控制台的已测试函数的名称

if __name__ == '__main__':
passedMsg = "%s passed"
failedMsg = "%s failed"

list_of_functions = [testaddDict(), testaddDictN(), testcharCount(), testcharCount2(), testlookupVal(),
                     testlookupVal2(), testfunRun(), testnumPaths(), testnumbersToSum(), teststreamSquares(),
                     teststreamSquares()]

for i in range(0, len(list_of_functions)):
    if list_of_functions[i]:
        print (passedMsg % str(list_of_functions[i]))
    else:
        print (failedMsg % str(list_of_functions[i]))

当我执行上述操作时,我得到的不是函数名,而是:

True passed

每次迭代。我哪里做错了


Tags: of函数name名称ifmainfunctions测试函数
1条回答
网友
1楼 · 发布于 2024-09-29 23:21:23

首先,让您的列表保存函数对象(这意味着您不应该调用它们,因为如果这样做,您将保存返回值

list_of_functions = [testaddDict, testaddDictN, ...]

这是因为函数是python中的第一类对象(意味着您可以将它们赋给其他变量,以此类推)。接下来,这样修改循环,直接在list_of_functions上迭代:

for f in list_of_functions:
    if f():
        print(passedMsg % f.__name__)
    else:
        print(failedMsg % f.__name__)

最重要的变化是在if语句中调用函数,并通过其返回值确定函数是否通过。相应地打印f.__name__,其中__name__属性保存函数的“名称”

为什么我建议直接遍历函数列表(而不是遍历range),主要是为了效率和简单


下面是一个演示,有两个功能:

def f1():
    return True

def f2():
    return False

for f in [f1, f2]:
    if f():
        print(passedMsg % f.__name__)
    else:
        print(failedMsg % f.__name__)

f1 passed
f2 failed

相关问题 更多 >

    热门问题