调用接受列表的函数时,谁负责(调用者 - 用户,或被调用者 - 函数)确保它是 alist
而不是 a 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
我的问题相当高级