>>> 1, == (1,)
File "<ipython-input-34-bddb0dd08d2c>", line 1
1, == (1,)
^
SyntaxError: invalid syntax
我为什么得到SyntaxError
?控制台中的行指向比较运算符'=='。我正在尝试比较2个元组。是的,(1,) == (1,)
有用。
这和这个...有关吗?
1,
Out[1]: (1,)
,1
Traceback (most recent call last):
File "<ipython-input-2-d73977cd7b2e>", line 1, in <module>
1("")
TypeError: 'int' object is not callable
def h():
print("hello from h")
h
Out[4]: <function __main__.h>
h()
hello from h
,h
Traceback (most recent call last):
File "<ipython-input-6-89db5d24b531>", line 1, in <module>
h("")
TypeError: h() takes 0 positional arguments but 1 was given
def h(""):
print("hello from h")
File "<ipython-input-7-e4606aaf3740>", line 1
def h(""):
^
SyntaxError: invalid syntax
def h(a):
print("hello from h")
,h
hello from h
我发现它很有趣-Python 3.6.3,在2.7或3.5上不会发生...
,ord A
Out[112]: 65
这变得有点难看。刚尝试过新的IDE-Pycharm和python 3.6.3。控制台在“,ord A”上给我语法错误,但Spyder 3.3.1却没有。这与IPython有关吗? 7.2在“,ord A” >> 65上给出相同的结果。
好的,2019年2月5日。我似乎陷入了一个黑洞。一个IPython黑洞。好像我对控制台使用的另一种子语言IPython感到困惑。 IPython中的%Autocall'使函数可以调用而不必键入括号'。尽管将%Autocall设置为0似乎仍然可以启用此行为。
答案 0 :(得分:6)
这是无效的语法。 Python看到一个元组,该元组具有从表达式1
和== (1,)
创建的2个值。后者是一个不完整的表达式,因此只针对该部分会出现错误。
请参见Operator precedence table,元组显示具有最高优先级,因此在从结果创建元组对象之前执行逗号之间的表达式。
是的,您可以只用逗号创建元组,但是每个组成部分必须是一个完整的表达式。如果希望元组成为较大表达式的一部分,则不能不使用括号来创建元组。
这是因为对于不使用括号但包含逗号的 any 表达式,逗号将导致从逗号前后的子表达式创建元组(部分是可选的)。使用括号可以更改Python视为完整表达式的内容。因此,如果要比较两个不同的元组,必须 使用括号来定义两个元组,因此请使用(1,) == (1,)
。放下任何一组括号后,您将创建一个包含较大表达式的单个元组(例如,(1,) == 1,
从(1,) == 1
相等性测试创建一个单元素元组,得到(False,)
)。