当调用一个接受列表的函数时,谁负责(调用者 - 用户或被调用函数)以确保它是list
而不是generator
?列表和发生器 - 呼叫者或功能责任
一个例子:
>>> def print_collection(coll):
... for element in coll:
... print element
>>> def print_collection_twice(coll):
... print_collection(coll)
... print_collection(coll)
有了一个名单,将没有惊喜工作:
>>> print_collection_twice([x*2 for x in xrange(3)])
0
2
4
0
2
4
并配有发电机,显然只打印一次,这可能会导致一个讨厌的错误:
>>> print_collection_twice((x*2 for x in xrange(3)))
0
2
4
什么是最佳实践他回覆?一个函数是否应该假设一个列表,并且一个用户可以提供list
,或者该函数的起始位置始终是real_list = list(input_list)
,这样用户就不会在乎了吗?
编辑
我知道如何检查元素和assert
的类型,我的问题是相当高的水平
你可以试试'LEN(参数)',看看它是否会抛出一个错误。 这没有太多的开销,应该始终工作。 – Bakuriu