实际作为参数传递给函数的是什么?

时间:2014-09-02 05:47:11

标签: python

 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

我是否在第一个示例中传递了元组或列表?

它们之间有什么区别?

2 个答案:

答案 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'>