Python:如何包装函数调用,而不是函数本身?

时间:2017-12-15 15:41:31

标签: python for-loop function-calls

例如,我有功能,funcA()funcB()funcC()。我想调用其中的每个函数,但在每个函数之后,执行一系列其他函数,例如func1()func2()func3()func4()

我知道我可以:

funcA()
func1()
func2()
func3()
func4()
funcB()
....

或者我可以:

def funcCombined():
    func1()
    func2()
    func3()
    func4()

funcA()
funcCombined()
funcB()
funcCombined()
...

但是有更好的方法吗?我尝试将它们放在一个列表中,例如:

funcs = [funcA(), funcB(), funcC()]

for func in funcs:
    x = func
    func1()
    func2()
    func3()
    func4()

但它似乎正在执行列表中的所有函数,然后在for循环中执行它们。

最好的方法是什么?

5 个答案:

答案 0 :(得分:5)

在您想要

之前不要调用这些函数
funcs = [funcA, funcB, funcC]

for func in funcs:
    func()

答案 1 :(得分:1)

您可以将函数存储在列表中而不是它们调用的返回值 - 函数是Python中的第一类对象 - 并在循环中调用它们,在每次调用后调用函数组:

funcs = (funcA, funcB, funcC)

for func in funcs:
    func()
    funcCombined()

答案 2 :(得分:0)

当您认为在首次将它们放入列表时调用每个函数时,您是正确的。这是因为funcA()调用funcA。但是,您可以通过省略括号来引用funcA - 这指的是函数本身。

你可以制作你的功能列表(不调用它们),循环它们,调用它们,并调用另一组函数,如

funcs = [funcA, funcB, funcC]
for func in funcs:
    func()
    funcCombined()

答案 3 :(得分:0)

如果您的函数使用不同的参数,请将它们存储在字典或第二个列表中

usesa@pinkya-spot:/var/www/eduonix-react/part-5$ sudo npm run dev
> part-5@1.0.0 dev /var/www/eduonix-react/part-5
> webpack -d --watch


Webpack is watching the files…

Hash: 8e2c8a589d1d818bde57
Version: webpack 3.10.0
Time: 943ms
        Asset     Size  Chunks                    Chunk Names
app.bundle.js  1.88 MB       0  [emitted]  [big]  main
  [14] ./src/index.js 470 bytes {0} [built]
  [27] ./src/App.js 2.42 kB {0} [built]
    + 26 hidden modules
usesa@pinkya-spot:/var/www/eduonix-react/part-5$ 

答案 4 :(得分:0)

假设您存储了一个功能对象列表而不是结果,它可以在一行中完成;

map(lambda func: func(), funcs)

注意:在Python 3.x中,map返回一个生成器,但您可以通过转换为列表来绕过延迟评估;

list(map(lambda func: func(), funcs))

如果您想传递参数,请参阅itertools.starmap