我不明白为什么更改x时变量'y'不会更新? (“ y”变量取决于“ x”吗?)
x = 5
y = x*2
print(x)
print(y)
x = 3
# Expect it to print '3' and '6' instead it print '3' and '10'
print(x)
print(y)
答案 0 :(得分:7)
(“ y”变量取决于“ x”对吗?
不。
很少有编程语言具有因变量/计算出的变量 [0],而Python并不是其中之一[1]。执行y = x*2
时,将完全评估=
右侧的表达式并将结果设置为y
的值。此后y
独立于x
[2]。
通常来说,如果您希望y
是x
的功能...则可以将其定义为x
的功能:
x = 5
def y(): return x*2
print(x)
print(y())
x = 3
# Expect it to print '3' and '6' instead it print '3' and '10'
print(x)
print(y())
[0]我知道make
的惰性变量和Perl的束缚标量
[1]它确实已经计算了属性(又称属性),但这是完全不同的事情
[2]在某些情况下,看起来像因变量,例如如果将y
设置为x
的可变子结构,则对x
的此子部分的更改将通过y
可见。不过,这实际上并不是依赖关系,只是两个变量指向相同的(可变)结构,因此这两个“可见”突变都应用于该共享结构。
答案 1 :(得分:1)
y
变量依赖于x
吗?
那么,首先,如果您设置了以下内容,
a = 7
b = a
a = 4
然后
print(id(a))
和print(id(b))
,您将获得两个不同的ID,因此覆盖b
时a
不会改变。
答案 2 :(得分:0)
您的y指向x变量的旧版本。 要更新y,您可以执行以下操作:
x = 5
y = x * 2
print(x)
print(y)
x = 3
y = x * 2
print(x)
print(y)
将输出:
5
10
3
6
答案 3 :(得分:0)
由于为变量y
分配了一个值,为了对其进行更改,您将需要直接访问y
。
y= x*2
根据此代码行中y
的值向x
赋值。 python如何工作,还有其他代码语言可以像您期望的那样执行。
在将新值分配给x
之后,您将需要再次写入y=x*2
。