Python结构模式匹配:已定义变量绑定与实例属性字面量行为是否有文档说明?
Python结构模式匹配的变量绑定与字面量匹配差异
PEP 636 - 结构模式匹配介绍了模式匹配如何为即时声明的变量绑定值:
match command.split(): case ["quit"]: print("Goodbye!") quit_game() case ["look"]: current_room.describe() case ["get", obj]: character.get(obj, current_room)类似
["get", obj]的模式仅匹配首元素为"get"的二元序列,同时会将obj = subject[1]进行绑定。
若obj已有值,我们可能预期它会被当作字面量使用,但实际并非如此,obj会被覆盖:
>>> # 我使用的是Python 3.12,可直接复制到iPython中运行 >>> obj = 3 >>> for i in range(5): ... match i: ... case obj: ... print(i) # 只会打印3吗? 0 1 2 3 4 >>> obj 4
但指定实例属性时不会出现这种情况:
>>> from dataclasses import dataclass >>> @dataclass ... class Num: ... x: int ... >>> num = Num(x=3) >>> for i in range(5): ... match i: ... case num.x: # 会将num.x绑定到i吗??? ... print(i) ... 3
在第二个案例中,num.x保持不变,被当作字面量使用。
我未在PEP 636中找到相关说明,请问该特性细节可在哪里查阅?此行为是否在PEP 636实现后引入?
注:我认为该行为合理且实用,仅想了解其是否有文档说明及文档位置
内容的提问来源于stack exchange,提问作者LondonRob
相关产品推荐
相关产品推荐

