Python 什么是作为参数传递给函数的?
在第一个示例中,我是否传递了一个元组或列表Python 什么是作为参数传递给函数的?,python,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 定义f(a): ... 打印类型(a) .
它们之间有什么不同?您将传递一个生成器和一个列表:
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
定义f(a):
... 打印类型(a)
... 对于我来说,在一个:
... 打印i
...
>>>f(i代表[1,2,3]中的i)
1.
2.
3.
>>>
>>>f([1,2,3]]中的i代表i)
1.
2.
3.
>>>f((i代表(1,))中的i)
1.
>>>
两者在for循环中都是可移植的,但工作方式不同。生成器每次迭代都执行一条语句,列表(或另一个Iterables)是一段数据,其所有元素都不需要任何操作
关于生成器的更多信息您不想检查类型,因为这样会破坏多态性的目的。但是,如果确实想知道对象的类型,可以调用内置的type()函数
>>> 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
>>>
#Python 3.x
a=[1,2,3]
b=(1,2,3)
类型(a)
类型(b)
您传递了一个生成器。尝试将行打印类型(a)
添加到函数中。列表中的每个元素都是迭代的
#Python 3.x
a=[1,2,3]
b=(1,2,3)
type(a)
<class 'list'>
type(b)
<class 'tuple'>