Python中有效的赋值目标有哪些?其限制由何阶段执行?
Python中的有效赋值目标及限制机制
Python里的有效赋值目标不止你提到的名称、属性、索引这三类,还有不少合法形式:
- 解包类目标:元组、列表甚至嵌套结构都能作为赋值目标,比如:
a, b = 1, 2 [x, y] = [3, 4] (a, (b, c)) = (1, (2, 3)) - 带星号的剩余元素目标:用来接收序列里剩下的元素,比如:
first, *rest = [1,2,3,4] - 切片目标:通过切片语法指定赋值的范围,本质上也是调用
__setitem__,比如:my_list[2:5] = [6,7,8] - 带括号的单个目标:语法上允许给带括号的单个变量赋值,比如
(a) = 10,虽然括号不影响实际效果,但属于合法的赋值目标。
至于限制机制:Python对赋值目标的限制是语法层面直接强制执行的,和Lua的逻辑一样。Python的语法规范里明确规定了赋值目标的合法结构,编译器在解析源码的第一步就会检查,一旦出现像f() = 1这种不符合语法的写法,会直接抛出SyntaxError,根本到不了编译成字节码的后期阶段。
内容的提问来源于stack exchange,提问作者user200783
相关产品推荐
相关产品推荐

