📜  使用范围名称(1)

📅  最后修改于: 2023-12-03 15:22:26.539000             🧑  作者: Mango

使用范围名称

在编写程序时,我们可以为变量、函数、类等起名字。这些名字被称为名称(name)。名称在程序中有着重要的作用,不仅可以让程序更易于理解,还可以提高程序的可读性和可维护性。

在Python中,我们可以使用名称来标识变量、函数、类等。这些名称有着不同的使用范围,也就是说,它们在不同的上下文中有着不同的含义。下面我们来看一下这些名称的不同使用范围以及它们的含义。

局部名称

局部名称是指在函数或方法内部定义的名称。这些名称只在其所在的函数或方法中有效,出了该函数或方法就被销毁了。以下是一个例子:

def test():
    x = 1
    print(x)

test()  # 输出: 1
print(x) # 报错: NameError: name 'x' is not defined

在上面的例子中,变量x是在test函数中定义的局部名称。在函数外调用该变量会导致NameError异常。

全局名称

全局名称是指在模块层次定义的名称。这些名称可以在模块中的任何地方被访问,也可以被其他模块引用。以下是一个例子:

# module.py
x = 1

def test():
    print(x)

test()  # 输出: 1

在上面的例子中,变量x是在模块层次定义的全局名称。在函数中可以直接访问该变量。

内置名称

内置名称是Python内置的名称,比如print、len等。这些名称可以在任何地方访问,无需导入任何模块。以下是一个例子:

print(len([1, 2, 3])) # 输出: 3

在上面的例子中,print和len都是Python内置的名称,可以在任何地方访问。

名称解析规则

当Python遇到一个名称时,它首先尝试在本地名称空间中查找该名称。如果找不到,就会将该名称解析为全局名称。如果还找不到,就会将该名称解析为内置名称。

如果同一个名称在不同的命名空间中都有定义,Python会按照以下规则进行名称解析:

  1. 在当前命名空间中查找该名称,如果找到就返回该名称
  2. 如果当前命名空间中没有该名称,就到该命名空间对应的模块中查找该名称,如果找到就返回该名称
  3. 如果模块中仍然找不到该名称,就到内置名称空间中查找该名称,如果找到就返回该名称
  4. 如果仍然找不到该名称,就抛出NameError异常
总结

通过本文的介绍,我们了解了Python中局部名称、全局名称和内置名称的使用范围及名称解析规则。在编写程序时,我们需要根据实际需要选择合适的名称,以提高程序的可读性和可维护性。