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

Joe*_*ing 0 python syntax tuples

>>> 1, == (1,)
  File "<ipython-input-34-bddb0dd08d2c>", line 1
    1, == (1,)
        ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

为什么我得到了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
Run Code Online (Sandbox Code Playgroud)

我发现它很有趣 - Python 3.6.3,不会发生在2.7或3.5 ......

,ord A
Out[112]: 65
Run Code Online (Sandbox Code Playgroud)

这有点难看.刚试过新的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设置为0仍然似乎启用此行为.

Mar*_*ers 6

这是无效的语法.Python看到从表达式创建2个值的元组1== (1,).后者是一个不完整的表达式,因此您只能获得该部分的错误.

请参阅运算符优先级,元组显示具有最高优先级,因此在从结果创建元组对象之前执行逗号之间的表达式.

所以是的,你可以用逗号创建元组,但是每个组成部分必须是一个完整的表达式.如果您希望元组成为更大表达式的一部分,则无法在不使用括号的情况下创建元组.

这是因为对于任何不使用括号但包含逗号的表达式,逗号将导致从逗号之前和之后的子表达式创建元组(该部分在可选之后出现).使用括号可以更改Python看到的完整表达式.因此,如果要比较两个不同的元组,则必须使用括号来对两个元组进行删除,因此请使用(1,) == (1,).只要删除任何一组括号,就会创建一个包含较大表达式(1,) == 1,的单元组(例如,从(1,) == 1相等性测试中创建一个单元素元组,结果(False,)).