def f(a):
for i in a:
print i
>>> f(i for i in [1,2,3])
1
2
3
>>> f([i for i in [1,2,3]])
1
2
3
>>> f((i for i in (1,)))
1
我是否在第一个示例中传递了元组或列表?
它们之间有什么区别?
答案 0 :(得分:2)
您传递了一个生成器和一个列表:
>>> def f(a):
... print type(a)
... for i in a:
... print i
...
>>> f(i for i in [1,2,3])
<type 'generator'>
1
2
3
>>>
>>> f([i for i in [1,2,3]])
<type 'list'>
1
2
3
>>> f((i for i in (1,)))
<type 'generator'>
1
>>>
两者都可以在for循环中迭代,但它的工作方式不同。 Generator在每次迭代时执行一个语句,列表(或另一个Iterables)是一段数据,它的所有元素都没有任何操作。
有关发电机的更多信息here
答案 1 :(得分:0)
你真的不想检查类型,因为你会破坏多态的目的。但是,如果您真的想知道对象的类型,可以调用内置的type()函数。
#Python 3.x
a=[1,2,3]
b=(1,2,3)
type(a)
<class 'list'>
type(b)
<class 'tuple'>