Python函数中的作用域规则详解
作用域是程序中变量可见性和生命周期的范围,Python中的作用域可以被分成四种:局部作用域、嵌套作用域、全局作用域和内置作用域。了解这些作用域规则是理解Python语言非常关键的部分之一。
局部作用域
在Python函数中,由程序员在函数内部定义的变量属于函数内部的局部作用域。当一个函数被调用时,这个函数的局部作用域被创建,当函数返回时,局部变量的生命周期也结束了。
def hello():
message = "Hello, world!"
print(message)
hello() # 输出 "Hello, world!"
print(message) # 报错,因为 message 不在全局作用域中
在上面的例子中,message
的作用域只在函数内部,因此在函数外部访问 message
变量会产生错误。
嵌套作用域
嵌套作用域指的是内部函数中定义的变量可以被其外部函数访问。在内部函数中定义的变量被称为自由变量,自由变量可以被内部函数修改。如果内部函数中的同名变量被重新赋值,那么变量的作用域就被定义为局部作用域。
def outer():
message = "Hello, world!"
def inner():
nonlocal message # 标记 message 不是局部变量,而是外部函数变量
message = "Hello, inner!"
inner()
print(message) # 输出 "Hello, inner!"
outer()
在上面的例子中,inner
函数中的 message
变量使用 nonlocal
关键词标记在嵌套作用域中,可以在内部函数中修改外部函数中定义的 message
变量。
全局作用域
在Python程序中全局作用域指的是在模块中定义的变量,全局变量在模块中声明,但在函数中进行访问。
a = 10
def hello():
print(a)
hello() # 输出 10
在上面的例子中,a
是全局变量,在 hello
函数中进行了访问,但是没有对其进行修改。
如果要在函数中修改全局变量,需要使用 global
关键词。
a = 10
def hello():
global a # 声明 a 是全局变量
a = 20 # 修改全局变量
print(a)
hello() # 输出 20
print(a) # 输出 20
内置作用域
Python中还有一个内置作用域,它包含了Python内置的函数和变量,这些变量在所有程序和模块中都是可用的。
print(len("Hello, world!")) # 输出 13
在上面的例子中,len
是Python内置函数,在任何程序中都可以直接使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python函数中的作用域规则详解 - Python技术站