刚从C ++切换到Python,发现有时很难理解Python背后的想法。
我想,变量是对实际对象的引用。例如,a =(1,2,5)表示a->(1,2,5),因此,如果b = a,则b和a是2个引用,指向相同的(1,2,5)。它有点像C / C ++中的指针。
如果我有:
def foo(a,b,c):
print a,b,c
a=(1,3,5)
foo(*a)
这*
是什么意思?
看起来它将元组a扩展为a [0],a [1]和a [2]。但是为什么print(*a)
在正常工作时不能正常print(a[0],a[1],a[2])
工作?
您似乎已经了解星号用于参数解压缩。因此,唯一的困惑是关于print
语句本身。
在python 3中,print(*a)
工作正常:
>>> a=(1,3,5)
>>> print(*a)
1 3 5
但是,在Python 2中,它不会:
>>> a=(1,3,5)
>>> print(*a)
File "<stdin>", line 1
print(*a)
^
SyntaxError: invalid syntax
这是因为print
它不是Python 2中的函数,因此Python 2不会将星号解释为参数解压缩指令。实际上,print
在Python 2中不需要括号。用括号括起来的值没有任何意义。(a)
和a
一样。(这里(a,)
是一个只有一个成员的元组。)所以print (a)
,print a
也一样。
但是,您可以print
使用将来的print
函数覆盖该语句:
>>> from __future__ import print_function
>>> print(*a)
1 3 5
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句