例如,我有功能,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循环中执行它们。
最好的方法是什么?
答案 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