我在python中有这个简单的代码来计算膳食+税+小费:
meal = 44.50
tax = 0.0675
tip = 0.15
meal = meal + meal * tax
total = meal + meal * tip
print("%.2f" % total)
我想知道为什么代码运行时没有任何问题,当我们清楚地有2个具有相同名称但值不同的变量时?我所指的变量是第1行和第5行的“用餐”
有人请为我澄清一下吗?
谢谢!
答案 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
个对象同时存在。