在python中,具有相同名称的对象引用不同的id

在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

在下面的代码片段中,在第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 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))