1. global关键字
在Python中,global是一个关键字,用于在函数内部声明一个全局变量。当在函数内部使用global关键字声明一个变量时,该变量会被认为是全局变量,即使在函数内部对变量进行修改,也会影响到函数外部。
1.1 global关键字的使用
在声明变量时,在变量前加上global关键字即可将其声明为全局变量。下面是一个例子:
def func():
global x
x = 10
func()
print(x) # 输出结果为 10
在这个例子中,变量x被声明为全局变量,所以在函数内部对x的修改会影响到函数外部。
1.2 注意事项
当使用global关键字声明变量时,需要注意以下几点:
变量必须在使用之前进行声明。如果在函数内部使用global关键字声明一个变量,而之前没有对该变量进行声明,会报错。
全局变量的命名应避免与函数内部变量重名。如果函数内部和全局变量同名,函数内部变量会覆盖全局变量。
2. nonlocal关键字
nonlocal是一个相对较新的关键字,在Python 3中引入。它用于在嵌套函数中访问外部函数的局部变量,也就是在一个函数内部嵌套另一个函数的情况。
2.1 nonlocal关键字的使用
在嵌套函数中,如果想要访问外部函数的局部变量并进行修改,需要使用nonlocal关键字声明该变量。下面是一个例子:
def outer():
x = 10
def inner():
nonlocal x
x += 5
print(x)
inner()
outer()
在这个例子中,inner函数内部使用nonlocal关键字声明了变量x,这样可以访问并修改外部函数outer的局部变量x。
2.2 注意事项
当使用nonlocal关键字声明变量时,需要注意以下几点:
变量必须在使用之前进行声明。如果在内层函数内部使用nonlocal关键字声明一个变量,而之前没有对该变量进行声明,会报错。
nonlocal只能在嵌套函数中使用。在非嵌套函数中使用nonlocal关键字会报错。
nonlocal只能访问外部函数的局部变量,不能访问全局变量。
3. global和nonlocal的区别
global和nonlocal的作用虽然有些相似,都是用于访问外部作用域的变量,但它们的用途和使用场景有一些不同。
3.1 作用范围
global关键字用于在函数内部声明全局变量,可以在函数内部和外部使用。而nonlocal关键字只能在嵌套函数中使用,用于访问外部函数的局部变量。
3.2 作用对象
global关键字作用于整个文件,可以在多个函数中使用。而nonlocal关键字只作用于嵌套函数之间,无法在其他函数中使用。
3.3 变量修改
使用global关键字声明的变量,在函数内部修改后会影响到函数外部的同名变量。而使用nonlocal关键字声明的变量,可以在嵌套函数内部访问并修改外部函数的同名局部变量。
因此,global关键字用于在函数内部声明全局变量,主要用于修改并影响整个文件范围内的变量值。而nonlocal关键字用于在嵌套函数内部访问外部函数的局部变量,主要用于在函数嵌套时实现局部作用域的变量访问和修改。
总结
global和nonlocal关键字是Python中用于访问外部作用域变量的关键字。使用global关键字可以在函数内部声明全局变量,使用nonlocal关键字可以在嵌套函数中访问外部函数的局部变量。
global关键字适用于在函数内部修改并影响整个文件范围内的变量值,而nonlocal关键字适用于在函数嵌套时实现局部作用域的变量访问和修改。
在使用这两个关键字时,需要注意变量的声明和作用范围,避免命名冲突和错误使用。