Python不同类型字面量调用方法的语法差异及括号使用规则
语法差异的核心原因
这个现象本质是Python词法解析器遵循最长匹配原则产生的语法歧义:
词法分析阶段扫描字符序列时,会尽可能匹配最长的合法token。当解析1.__eq__这段代码时,解析器会优先将1.识别为浮点数字面量,剩下的__eq__缺少属性访问的前导.,自然就抛出语法错误。
其他写法合法的原因
- 字符串字面量
"STR".__eq__不存在歧义:双引号明确标记了字符串的边界,后面的.只会被识别为属性访问符 - 带完整小数位的浮点数
1.0.__eq__:1.0已经是完整的浮点数token,后续的.会被判定为属性访问 1..__eq__:第一个.和1组成浮点数1.(等价于1.0),第二个.作为属性访问符,解析逻辑完全通顺
需要加括号的场景
当你需要调用无后缀的整数字面量、负数字面量的属性或方法时,都需要用括号包裹字面量来消除歧义:
# 正确写法 keyfunc = (1).__eq__ keyfunc = (-2).__add__
除此之外,你也可以在整数和属性访问符之间加空格来规避问题:1 .__eq__,但可读性不如加括号的写法,更推荐用括号包裹的形式。
内容的提问来源于stack exchange,提问作者VPfB
相关产品推荐
相关产品推荐

