在我的Windows 7上使用PyCharm(社区版)时,我可以有这样的课程:
class X:
def __init__(self):
self.x = 0
def print(self):
print('x:', x)
正常使用:
>>> x = X()
>>> x.print()
0
此代码运行没有问题。
但是,当我使用gedit和终端(python x_file.py
)在我的Ubuntu上运行相同的代码时,我收到一个错误:
$ python main.py
File "main.py", line 6
def print(self):
^
SyntaxError: invalid syntax
为什么不同,我是否允许在类中使用名为print
的方法,或者这只是PyCharm的功能之一?
答案 0 :(得分:1)
在python3中绝对没有问题,但是在python2中有一个print
语句,它阻止你将它用作标识符,包括方法名称。
看起来你在Ubuntu上有python2而在Windows上有python3,因此不同。
如果你想避免python2中的print
语句,请添加:
from __future__ import print_function
在文件的顶部,你应该获得python3的print
函数,从而允许你定义一个名为print
的方法,(参见this文档)。 / p>
另请注意,如果没有__future__
导入,则在python3中输入以下行:
print('x:', x)
输出:
x: <value for x>
然而,在没有的python2 中你得到了特殊的导入:
('x:', <value for x>)
因为(...)
没有指定函数的参数,但是被解释为要由语句打印的元组。
答案 1 :(得分:0)
你的ubuntu python版本是否低于3?因为Python 2使用:
print "test"
和Python 3使用:
print("test")
答案 2 :(得分:0)
在python 2+中print
是一个特殊的语句,如break
,return
,raise
等等。您不能通过创建具有相同名称的对象来覆盖它们。在python 3+中print
是一个函数,参数是括号之间的字符串。可以在python中覆盖内置函数,这样就可以在python 3中定义自己的print
(甚至在类之外)。
在你的特定例子中,PyCharm可能基于python 3,在你的ubuntu机器上你有&#39; 2.something&#39;。
偏离主题:覆盖内置通常不是一个好主意。