alw*_*btc 35 python function shortcut sequential
有没有在python中连续两次或更多次调用函数的简短方法?例如:
do()
do()
do()
Run Code Online (Sandbox Code Playgroud)
也许像:
3*do()
Run Code Online (Sandbox Code Playgroud)
Gre*_*ill 63
我会:
for _ in range(3):
do()
Run Code Online (Sandbox Code Playgroud)
的_
是其值为你不关心的变量约定.
你可能也会看到一些人写道:
[do() for _ in range(3)]
Run Code Online (Sandbox Code Playgroud)
但是这稍微贵一些,因为它创建了一个包含每次调用的返回值的列表do()
(即使它是None
),然后抛弃结果列表.我不建议使用,除非你正在使用的返回值的列表.
jul*_*ria 11
您可以定义一个重复传递函数N次的函数.
def repeat_fun(times, f):
for i in range(times): f()
Run Code Online (Sandbox Code Playgroud)
如果你想让它更灵活,你甚至可以将参数传递给重复的函数:
def repeat_fun(times, f, *args):
for i in range(times): f(*args)
Run Code Online (Sandbox Code Playgroud)
用法:
>>> def do():
... print 'Doing'
...
>>> def say(s):
... print s
...
>>> repeat_fun(3, do)
Doing
Doing
Doing
>>> repeat_fun(4, say, 'Hello!')
Hello!
Hello!
Hello!
Hello!
Run Code Online (Sandbox Code Playgroud)
一个简单的for循环?
for i in range(3):
do()
Run Code Online (Sandbox Code Playgroud)
或者,如果您对结果感兴趣并希望收集它们,则奖励为1班轮:
vals = [do() for _ in range(3)]
Run Code Online (Sandbox Code Playgroud)
另外三种方式:
(I)我认为使用map
也可能是一个选项,尽管None
在某些情况下使用s 需要生成一个附加列表,并且始终需要一个参数列表:
def do():
print 'hello world'
l=map(lambda x: do(), range(10))
Run Code Online (Sandbox Code Playgroud)
(II)itertools
包含可用于迭代其他功能的功能,以及https://docs.python.org/2/library/itertools.html
(III)到目前为止,我认为没有提到使用函数列表(实际上,它在语法上与最初讨论的最接近):
it=[do]*10
[f() for f in it]
Run Code Online (Sandbox Code Playgroud)
或作为一个班轮:
[f() for f in [do]*10]
Run Code Online (Sandbox Code Playgroud)
我的两分钱:
from itertools import repeat
list(repeat(f(), x)) # for pure f
[f() for f in repeat(f, x)] # for impure f
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
87766 次 |
最近记录: |