python - 我可以将函数引用添加到列表中,并迭代该列表,连续调用每个函数吗?

标签 python function reference

我正在开发一个验证框架,我想在其中做一些类似的事情(下面的伪代码 - 只是一个示例):

class VerificationBase
{
    criticisms = set()
    AddCriticism( *FuncRef* ): criticisms.add(FuncRef)
    Execute(): for f in criticisms: [call f]
}

def CriticizeDatabaseConnections(): { //do stuff }
def CriticizeDatabaseSchemas(): { //do stuff }
def CriticizeNetworkSettings(): { //do stuff}

...

VerificationBase.AddCriticism(CriticizeDatabaseConnections())
VerificationBase.AddCriticism(CriticizeDatabaseSchemas())
VerificationBase.AddCriticism(CriticizeNetworkSettings())

VerificationBase.Execute()

这种风格叫什么?我确信有关于此的详细文档,但我什至不知道除了“通过引用调用函数”之外还应该搜索什么 - 即使这不会产生最有用的结果。

我怎样才能正确完成上面的例子?

最佳答案

函数就像Python中的任何其他名称一样,您可以将函数引用存储在列表(或集合,或另一个变量等)中,然后使用for循环迭代它们,并使用您使用的名称调用它们在 for 循环中。

一个简单的例子 -

>>> def a():
...     print('a')
...
>>> def b():
...     print('b')
...
>>> l = [a,b]
>>>
>>> for i in l:
...     i()
...
a
b

或者一组(如伪代码中所示)-

>>> s = set()
>>> s.add(a)
>>> s.add(b)
>>> for i in s:
...     i()
...
a
b

此外,在您的伪代码中,当您添加函数时,您需要传入(添加)函数引用,而不是调用函数的结果。函数 a 的示例 -

>>> def a():
...     print('a')
...

a() 调用该函数,而名称 a 引用该函数。示例-

>>> a()
a
>>> a
<function a at 0x022262B8>

关于python - 我可以将函数引用添加到列表中,并迭代该列表,连续调用每个函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31436687/

相关文章:

python - 如何从 spicy.stats 获取分发名称。冷冻配送?

python - 如何在 GridSearchCV( ..., n_jobs = ... ) 中找到最佳进程数?

C++ 如何在包含两个变量的结构中将不同数量的值存储到我的变量中?

javascript - 如何创建一个对 Javascript 中先前函数生成的内容使用react的函数

javascript - 将具有多个函数的 JavaScript 简化为单个函数数组

c++ - 给出一个对象指针作为参数

共享库中的 C# WCF : Having a single app. 配置提供对服务的访问

c# - tensorflow 服务

perl - 如何在 Perl 中使用代码引用作为回调?

Python paramiko SFTP IOError