在记录Python函数时,我发现它更像Pythonic:
def Foo(i):
"""i: An interable containing…"""
......而不是......
def Foo(i):
"""i: A list of …"""
当i
确实不需要是list
时。 (Foo
会愉快地对set
,tuple
等进行操作。问题是生成器。生成器通常只允许1次迭代。 大多数函数都可以使用只允许单次传递的生成器或迭代器,但有些不是。
对于那些不能接受只能迭代一次的生成器/东西的函数,是否有一个清晰,一致的Python术语来说“只能迭代多次的东西”?
答案 0 :(得分:2)
我不知道这个标准术语,至少不是随便的,但我认为如果你需要一个短语,“可重复使用的可迭代”会得到重点。
在实践中,通常可以构建您的函数,这样您就不需要多次迭代i
。或者,您可以从迭代中创建一个列表,然后根据需要多次遍历列表;或者您可以使用itertools.tee
获取迭代器的多个独立“副本”。即使您确实需要多次使用它,也可以接受生成器。
答案 1 :(得分:1)
这可能更多的是风格和偏好而不是其他任何事情,但是......我对文档有不同看法:我总是根据程序上下文中的预期输入编写文档字符串< /强>
示例:如果我编写了一个期望遍历字典键并忽略其值的函数,我写道:
arg : a dictionary of...
即使for e in arg:
可以与其他迭代一起使用。我选择这样做,因为在我的代码的上下文中,我不关心函数是否仍然可以工作 ...我更关心那些阅读文档的人是否理解该函数是如何意味着使用。
另一方面,如果我正在编写一个可以通过设计处理各种迭代的实用函数,我会采用以下两种方法之一:
换句话说,我试图使我的功能足够坚固以处理边缘情况,或者对其局限性非常直言。
再说一遍:你想采取的方法没有任何问题,但我认为这是“explicit is better than implicit”的案例之一:其中提到“可重复使用的可迭代”的文档是明确准确的,但是形容词很容易被忽视。
HTH!