为什么两个同名变量不会混淆代码?
我有一段简单的Python代码,用来计算餐费加上税和小费:
meal = 44.50
tax = 0.0675
tip = 0.15
meal = meal + meal * tax
total = meal + meal * tip
print("%.2f" % total)
我想知道为什么这段代码运行得很顺利,明明有两个变量名字是一样的,但值却不同?我说的这个变量就是第一行和第五行的“meal”。
有没有人能给我解释一下这个问题?
谢谢!
3 个回答
0
我猜你是指 meal
。记住,赋值操作是最后进行的——程序首先计算 meal + meal * tax
,这个结果会存储在一个临时变量中,然后再把 meal
的值更新为这个临时变量的值。你可以在那行代码前后打印一下值,看看变化。实际上,程序背后的执行过程是这样的:
temporary = meal + meal * tax
meal = temporary
#temporary is out of scope at this point
0
当你第二次给 meal
赋值(在这一行 meal = meal + meal * tax
),之前的值 44.50
就被覆盖了——你再也无法访问到 44.50
这个值了。所以,在这段代码中,meal
这个东西从来不会同时存在两个不同的值。
7
你并不是有两个变量,name meal
只是一个变量名,而在第二个 meal = ...
语句中被覆盖的是这个变量的 值(也就是指向一个整数对象的“指针”,而不是那个整数对象本身)。
所以你无法再访问第一个值。就这个变量名来说,你只能访问第二个值。看看这个例子:
>>> meal = 5 # first meal variable
>>> id(meal)
30126376
>>> meal = meal + 7 # second meal variable
>>> id(meal)
30126292
注意,第二个 meal
变量有一个新的 ID。这是因为它是一个新的 int
,虽然名字相同,但它是不同的。之前的变量已经无法访问了。