Python 3.7.9为何允许b = a*+2这类语法合法?
为什么Python允许
a*+2这类语法生效 这个语法不是Python 3.7.9特有的规则,所有Python版本都支持该写法,核心原因是Python对运算符的定义规则:
+、-除了作为常见的二元加减运算符外,同时可以作为一元运算符,代表正、负号- 一元运算符的优先级高于乘法
*、除法/这类二元算术运算符
所以你提到的b = a*+2会被Python解析器自动识别为b = a * (+2),完全符合语法规则,不会抛出报错。
你提到的德国键盘布局下容易将
a**2误写为a*+2的问题确实是实际存在的体验痛点,这类语法上合法但不符合开发者预期的代码,确实会提升排查成本。
针对这类问题可以用下面的方案规避:
- 写代码时尽量遵循PEP8的空格规范,二元运算符前后加空格,如果确实需要用一元正号,也建议和前面的二元运算符分开,写成
a * +2,一眼就能和a ** 2区分开 - 接入pylint、flake8这类静态代码检查工具,可以配置规则检测无空格的连续运算符写法,在开发阶段就提前抛出警告,避免上线后才发现bug
内容的提问来源于stack exchange,提问作者cakelover
相关产品推荐
相关产品推荐

