per*_*iae 47 python loops idioms
说我有一个foo
我想要打电话的功能n
.在Ruby中,我会写:
n.times { foo }
Run Code Online (Sandbox Code Playgroud)
在Python中,我可以写:
for _ in xrange(n): foo()
Run Code Online (Sandbox Code Playgroud)
但这似乎是一种做事的hacky方式.
我的问题:在Python中有这样一种惯用的方法吗?
TM.*_*TM. 43
你已经展示了惯用的方式:
for _ in range(n): # or xrange if you are on 2.X
foo()
Run Code Online (Sandbox Code Playgroud)
不确定这是什么"hackish".如果您有更具体的用例,请提供更多详细信息,并且可能有更适合您正在做的事情.
Car*_*ers 17
如果您需要该times
方法,并且需要在自己的函数上使用它,请尝试以下方法:
def times(self, n, *args, **kwargs):
for _ in range(n):
self.__call__(*args, **kwargs)
import new
def repeatable(func):
func.times = new.instancemethod(times, func, func.__class__)
return func
Run Code Online (Sandbox Code Playgroud)
现在将@repeatable
装饰器添加到您需要times
方法的任何方法:
@repeatable
def foo(bar):
print bar
foo.times(4, "baz") #outputs 4 lines of "baz"
Run Code Online (Sandbox Code Playgroud)
Ale*_*lli 16
最快,最干净的是itertools.repeat:
import itertools
for _ in itertools.repeat(None, n):
foo()
Run Code Online (Sandbox Code Playgroud)
问题预先假定调用foo()n次是一个先验必要的事情.来自哪里?它是可迭代的长度吗?然后迭代迭代.当我拿起Python时,我发现我使用的很少,没有任意值; 当你成为一个整数时,你的n背后有一些更为突出的意义.
今天早些时候,我遇到了尼克劳斯·沃斯(Nicklaus Wirth)为IEEE计算机提出的题为" 好主意 - 通过镜子"(未来读者的存档版本)的挑衅性论文.在第4节中,他对编程结构提出了不同的倾向,即每个人(包括他自己)都认为这是理所当然的,但这些结构具有表达缺陷:
"Algol
for
声明的一般性应该是向所有未来设计师发出警告信号,始终牢记构造的主要目的,并且厌倦了夸张的普遍性和复杂性,这可能很容易变得适得其反."
algol for
相当于C/Java for
,它只是做得太多了.那篇论文是一本有用的读物,只是因为它让我们不那么理所当然地认为我们很容易做到.所以也许更好的问题是"为什么你需要一个执行任意次数的循环?"
归档时间: |
|
查看次数: |
28821 次 |
最近记录: |