通过函数重复应用创建列表
我想要这个:
[foo() for _ in xrange (100)]
但要更好看一些。?
6 个回答
3
根据你对“更美”的定义,你可能会更喜欢这个写法:
map(lambda x: foo(), xrange(100))
不过我觉得你现在的写法已经很好了。
8
你可以这样写一个生成器 repeat
:
def repeat(times, func, *args, **kwargs):
for _ in xrange(times):
yield func(*args, **kwargs)
然后:
list(repeat(100, foo))
它还可以接受参数,这些参数会传递给函数,所以你可以:
from random import randint
list(repeat(100, randint, 1, 100)) # 100 random ints between 1 and 100
因为它是一个生成器,你可以把它用在任何可迭代的对象上,比如 list
(像这里这样)、tuple
或 set
,或者在列表推导式和循环中使用它。
5
我怕你在Python中找不到比这个更好看的写法了,除了有些人会建议不要用_
来表示“匿名”变量。这是Python中做你想做的事情的常见写法。
(对于新手来说,_
可能会让人感到困惑,因为它可能被误认为是特殊语法。我自己会用它,但只在我代码的“专家部分”。我也越来越常遇到它,不过大家对这个问题的看法似乎还是有点分歧。)