为什么两个同名变量不会混淆代码?

0 投票
3 回答
1171 浏览
提问于 2025-04-28 01:18

我有一段简单的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,虽然名字相同,但它是不同的。之前的变量已经无法访问了。

撰写回答