在python中,具有相同名称的对象引用不同的id
在下面的代码片段中,在第1行和第2行创建了两个名为在python中,具有相同名称的对象引用不同的id,python,python-3.x,decorator,python-decorators,Python,Python 3.x,Decorator,Python Decorators,在下面的代码片段中,在第1行和第2行创建了两个名为div的对象 python如何区分在同一作用域下创建的两个div对象 当对两个对象应用id()时,将为相似的命名对象显示两个不同的地址。为什么会这样 def分区(a、b): 返回a/b 打印(id(div))id=199……1640 def智能分区(功能): def内部(a、b): 如果Python中的a,那么一切(基本上)都是一个对象,它允许重复使用变量名 因此,我相信您所做的是将变量名div从指向函数的名称重新分配到指向函数smart\u d
div
的对象
div
对象id()
时,将为相似的命名对象显示两个不同的地址。为什么会这样div
从指向函数的名称重新分配到指向函数smart\u div
的指针
您应该看到,您无法访问旧的div函数。在Python中,一切(基本上)都是一个对象,它允许重复使用变量名
因此,我相信您所做的是将变量名div
从指向函数的名称重新分配到指向函数smart\u div
的指针
您应该看到无法访问旧的div函数。在C等语言中,可以使用不同的值重命名变量。这就是更新值的方式。但在C中,它们必须具有相同的类型,因为C是一种静态类型语言。另一方面,Python是动态类型的,这意味着它不跟踪类型。在程序中有一个表,其中名称与值相关联,当您在同一范围内将
div
定义为一个新值时,它只会覆盖该值,因为第二个div
随后出现。定义新的div
值后,您将无法再访问函数div
在C等语言中,可以使用不同的值重命名变量。这就是更新值的方式。但在C中,它们必须具有相同的类型,因为C是一种静态类型语言。另一方面,Python是动态类型的,这意味着它不跟踪类型。在程序中有一个表,其中名称与值相关联,当您在同一范围内将div
定义为一个新值时,它只会覆盖该值,因为第二个div
随后出现。定义新的div
值后,您将无法再访问函数div
div=smart\u div(div)
覆盖div
对象。您将获得一个不同的id值,因为它不再由def div
定义。如果您print(div)
可以看到此对象现在引用函数smart\u div.ok。因此div
变量现在指的是smart\u div()
而不是原来的div
函数。谢谢。对象没有“名称”,名称可以引用对象,但它们可以随时自由地重新分配给不同的名称。本主题在这里解释得很好:div=smart\u div(div)
覆盖div
对象。您将获得一个不同的id值,因为它不再由def div
定义。如果您print(div)
可以看到此对象现在引用函数smart\u div.ok。因此div
变量现在指的是smart\u div()
而不是原来的div
函数。谢谢。对象没有“名称”,名称可以指对象,但它们可以随时自由地重新分配给不同的名称。这里很好地解释了这个主题:是的,我无法访问旧的div
函数是的,我无法访问旧的div
函数
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))