Python中普通变量访问的用途是什么?
在python中,这种语法被接受并正确运行Python中普通变量访问的用途是什么?,python,Python,在python中,这种语法被接受并正确运行 foo = "test variable" foo # plain variable access foo # plain variable access print(foo) >>>>test variable Q:所以我的问题是,Python上下文中的用例是什么?其他一些语言会强调这是一个语法错误 为了确保发生了一些事情,我使用了dis模块并获得了以下输出 def test(): foo = "test
foo = "test variable"
foo # plain variable access
foo # plain variable access
print(foo)
>>>>test variable
Q:所以我的问题是,Python上下文中的用例是什么?其他一些语言会强调这是一个语法错误
为了确保发生了一些事情,我使用了
dis
模块并获得了以下输出
def test():
foo = "test variable"
foo
return foo
dis.dis(test)
>>>>3 0 LOAD_CONST 1 ('test variable')
2 STORE_FAST 0 (foo)
4 4 LOAD_FAST 0 (foo)
6 POP_TOP
5 12 LOAD_FAST 0 (foo)
14 RETURN_VALUE
def test():
foo = "test variable"
return foo
dis.dis(test)
>>>>9 0 LOAD_CONST 1 ('test variable')
2 STORE_FAST 0 (foo)
10 4 LOAD_FAST 0 (foo)
6 RETURN_VALUE
正如你所看到的,有一个额外的操作,我似乎无法理解
4 LOAD_FAST 0 (foo)
6 POP_TOP
除了REPL作为
打印的快捷方式(如果var不是None-other“”,则repr(var))
,它没有任何用途
LOAD\u FAST
将变量添加到堆栈中,然后POP\u TOP
将其删除。实际上什么也没发生
为什么允许这样做?嗯,因为这比不简单。我的意思是我们必须小心地允许
func()
,但不允许func
。当我们使用属性时,它也变得更加复杂,例如:
class T:
def __init__(self):
self.gets = 0
@property
def attr(self):
self.gets += 1
t = T()
print(t.gets) # 0
t.attr
print(t.gets) # 1
因此,即使是引用“普通属性”的行为也可能有副作用。除了将REPL用作打印的快捷方式(如果var不是其他“”,则为repr(var))
:
LOAD\u FAST
将变量添加到堆栈中,然后POP\u TOP
将其删除。实际上什么也没发生
为什么允许这样做?嗯,因为这比不简单。我的意思是我们必须小心地允许func()
,但不允许func
。当我们使用属性时,它也变得更加复杂,例如:
class T:
def __init__(self):
self.gets = 0
@property
def attr(self):
self.gets += 1
t = T()
print(t.gets) # 0
t.attr
print(t.gets) # 1
因此,即使是引用“普通属性”的行为也可能有副作用。附加的foo
s没有可观察的效果。dis输出显示该值已加载,然后立即丢弃
python中丢弃值不是错误。附加的foo
s没有可观察的效果。dis输出显示该值已加载,然后立即丢弃
python中丢弃值不是错误。请注意,如果我删除建议的其他问题,我会理解。另外,如果在python中这些类型的调用有一个特定的名称,我将进行编辑?注意,我可以在例如C中做同样的事情(尽管编译器可能会抛出警告)。我在问,既然它被接受了,是否有一个用例。我不会称它为“变量调用”(太接近“函数调用”);也许是“可变访问”。为了避免混淆。然后我向你的问题提出建议,并将文本中的标题和主要问题更改为“Python中纯变量本身的用途是什么?”这是一个稍微不同但希望比“为什么”更清楚的问题。请注意,如果我删除建议的其他问题,我会理解。另外,如果在python中这些类型的调用有一个特定的名称,我将进行编辑?注意,我可以在例如C中做同样的事情(尽管编译器可能会抛出警告)。我在问,既然它被接受了,是否有一个用例。我不会称它为“变量调用”(太接近“函数调用”);也许是“可变访问”。为了避免混淆。然后我向你的问题提出建议,并将文本中的标题和主要问题更改为“Python中纯变量本身的用途是什么?”这是一个稍微不同但希望比“为什么”更清楚的问题。我明白了,但当从脚本运行它时,这些行不会发生任何事情,这能被推翻吗?你说的推翻是什么意思?比如强迫某事发生?或者强制发出警告(大多数IDE都会为此发出警告)?我的意思是,如果我只在上面代码的一行上使用t
,那么什么也不会发生。是否有一种特殊的方法与此相关。当我只使用变量的名称时,我是否可以强制某些事情发生。不,你不能。那会很混乱。考虑到它在intepreter中有一个行为,我不知道它在代码中是否会那么混乱。我明白了,但是当从脚本运行它时,这些行上不会发生任何事情,可以重写吗?重写是什么意思?比如强迫某事发生?或者强制发出警告(大多数IDE都会为此发出警告)?我的意思是,如果我只在上面代码的一行上使用t
,那么什么也不会发生。是否有一种特殊的方法与此相关。当我只使用变量的名称时,我是否可以强制某些事情发生。不,你不能。这将是非常令人困惑的。考虑到它在intepreter中有一个行为,我不知道它在代码中是否会如此令人困惑。