关于语法:python是如何解析++ x的?

how does python parse ++x?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Behaviour of increment and decrement operators in Python

我对python完全陌生,我写了+x,认为它会增加x,所以我错了,没问题。但也没有语法错误。因此我的问题是:++X在Python中实际上意味着什么?


+运算符是一元加号运算符;它返回的数值参数不变。因此,++x被解析为+(+(x)),并赋予x不变(只要x包含一个数字):

1
2
3
4
5
6
>>> ++5
5
>>> ++"hello"
Traceback (most recent call last):
  File"<stdin>", line 1, in <module>
TypeError: bad operand type for unary +: 'str'

如果在用户定义类的对象上调用+,如果存在,则调用__pos__特殊方法;否则,将如上所述引发TypeError

为了确认这一点,我们可以使用ast模块来演示python如何解析表达式:

1
2
3
import ast
print(ast.dump(ast.parse('++x', mode='eval')))
Expression(body=UnaryOp(op=UAdd(), operand=UnaryOp(op=UAdd(), operand=Name(id='x', ctx=Load()))))