如何在python中连续两次或多次调用函数?

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),然后抛弃结果列表.我不建议使用,除非你正在使用的返回值的列表.

  • 我认为使用列表理解只是为了重复动作绝不是一个好主意 (12认同)
  • 是的,列表推导式旨在创建新列表,不应该用于产生副作用。 (2认同)

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)


g.d*_*d.c 5

一个简单的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)


VDV*_*VDV 5

另外三种方式:

(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)


Jof*_*fer 5

我的两分钱:

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)

  • 在这种情况下,您能否详细说明纯和不纯之间的区别? (2认同)