gpt4 book ai didi

python - 为什么python在函数和类中使用不同的作用域机制?

转载 作者:行者123 更新时间:2023-12-04 17:00:32 25 4
gpt4 key购买 nike

一些代码和说明:

# name_space.py

class Class1(object):
var1 = 11
def f1(self):
print Class1.var1 # this will OK
print var1 # this will be an error

def func_1():
var1 = 11

def func_2():
print var1 # here will be OK

func_2()

所以,正如我们所见:
  • 在类中定义一个函数,内部函数没有能力直接访问外部类中的变量。 (我们仍然可以使用类名访问变量)。
  • 在函数中定义一个函数,内部函数可以直接访问外部函数中的变量。

  • 更多代码:
    # name_space2.py

    class A(object):
    def f1(self):
    def f2():
    print f1 # this will be an error
    print A.f1 # this will OK
    f2()

    那么,为什么python在函数和类中使用不同的作用域机制呢?

    最佳答案

    因为两者的生命周期和可见性完全不同。

    任何可以访问类的人都可以访问类属性。类属性也必须与继承有关;如果我写这样的代码怎么办:

    class Foo(object):
    def eggs(self):
    print eggs()

    class Bar(Foo):
    def ham(self):
    print eggs()

    按你的逻辑,为什么要 eggsFoo.eggs 中可见但不在 Bar.ham ?

    函数局部变量只能被函数和嵌套在函数中的任何东西访问。再次调用该函数,您将获得一组新的变量。

    因此,当您创建一个类实例并在该实例上调用一个方法时,在此期间类属性可能已被其他代码更改。函数闭包(在嵌套作用域中访问的局部变量)不能从函数外部更改。

    您根本不能将这两个范围视为相同。

    关于python - 为什么python在函数和类中使用不同的作用域机制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20287885/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com