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