【发布时间】:2019-12-19 06:20:38
【问题描述】:
在下面的代码 sn-p 中,在第 1 行和第 2 行创建了两个名为 div 的对象。
python如何区分同一作用域下创建的两个
div对象?当
id()应用于两个对象时,会为类似命名的对象显示两个不同的地址。为什么会这样?
def div(a,b):
return a/b
print(id(div)) # id = 199......1640 ################################ line 1
def smart_div(func):
def inner(a,b):
if a<b:
a,b=b,a
return func(a,b)
return inner
a = int(input("Enter 1st: "))
b = int(input("Enter 2nd: "))
div = smart_div(div)
print(id(div)) # id = 199......3224 ############################# line 2
print(div(a,b))
在像 C 这样的传统语言中,不能在同一范围内创建两个具有相同名称的变量。但是,在 python 中,这条规则似乎并不适用。
【问题讨论】:
-
div = smart_div(div)覆盖div对象。您将获得不同的 id 值,因为它不再由def div定义。如果你print(div)你可以看到这个对象现在引用了函数 smart_div。 -
好的。所以
div变量现在指的是smart_div()而不是原来的div函数。谢谢。 -
对象没有“名称”,名称可以引用对象,但可以随时重新分配不同的名称。
-
这个话题在这里解释得很好:nedbatchelder.com/text/names.html
标签: python python-3.x decorator python-decorators