为什么2个同名变量不会弄乱代码?

时间:2014-10-17 00:49:34

标签: python

我在python中有这个简单的代码来计算膳食+税+小费:

meal = 44.50
tax = 0.0675
tip = 0.15

meal = meal + meal * tax
total = meal + meal * tip

print("%.2f" % total)

我想知道为什么代码运行时没有任何问题,当我们清楚地有2个具有相同名称但值不同的变量时?我所指的变量是第1行和第5行的“用餐”

有人请为我澄清一下吗?

谢谢!

3 个答案:

答案 0 :(得分:7)

你没有两个变量, name meal是变量,它是该变量的(指向整数的'指针'在第二个meal = ...语句中被覆盖的对象,而不是整数对象本身。

因此您无法再访问第一个值。就变量名而言,您只能访问第二个变量名。见这个例子

>>> meal = 5   # first meal variable
>>> id(meal)
30126376

>>> meal = meal + 7  # second meal variable
>>> id(meal)
30126292

请注意,“2nd”meal变量具有新ID。那是因为它是一个恰好具有相同名称的新int。之前的变量不再可访问。

答案 1 :(得分:0)

我认为你的意思是meal。请记住,分配最后完成 - 首先程序将meal + meal * tax计算为临时变量,然后重新定义meal以获得该临时变量的值。尝试打印该行之前和之后的值作为插图。幕后的实际执行情况如下:

temporary = meal + meal * tax
meal = temporary
#temporary is out of scope at this point

答案 2 :(得分:0)

当您第二次为meal分配值时(在meal = meal + meal * tax行上),之前的44.50值会被覆盖 - 您无法访问值{{ 1}}了。因此,在这段特定的代码片段中,永远不会有两个44.50个对象同时存在。