1,==(1,)-SyntaxError:语法无效

时间:2019-01-31 13:37:26

标签: python syntax tuples

>>> 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似乎仍然可以启用此行为。

1 个答案:

答案 0 :(得分:6)

这是无效的语法。 Python看到一个元组,该元组具有从表达式1== (1,)创建的2个值。后者是一个不完整的表达式,因此只针对该部分会出现错误。

请参见Operator precedence table元组显示具有最高优先级,因此在从结果创建元组对象之前执行逗号之间的表达式。

是的,您可以只用逗号创建元组,但是每个组成部分必须是一个完整的表达式。如果希望元组成为较大表达式的一部分,则不能不使用括号来创建元组。

这是因为对于不使用括号但包含逗号的 any 表达式,逗号将导致从逗号前后的子表达式创建元组(部分是可选的)。使用括号可以更改Python视为完整表达式的内容。因此,如果要比较两个不同的元组,必须 使用括号来定义两个元组,因此请使用(1,) == (1,)。放下任何一组括号后,您将创建一个包含较大表达式的单个元组(例如,(1,) == 1,(1,) == 1相等性测试创建一个单元素元组,得到(False,))。