Python3中global/nonlocal用法
Posted fengbingchun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python3中global/nonlocal用法相关的知识,希望对你有一定的参考价值。
全局变量(global variable)是那些未在任何函数内部定义并且具有全局作用域的变量,而局部变量(local variable)是那些在函数内部定义并且其作用域仅限于该函数的变量。换句话说,我们可以说局部变量只能在初始化它的函数内部访问,而全局变量在整个程序和每个函数内部都可以访问。
global关键字:如果我们要进行赋值或更改全局变量,我们只需要在函数中使用global关键字。打印和访问全局变量不需要global关键字。如果在函数内部更改或创建的任何变量尚未声明为全局变量,则它都是局部变量。在函数外使用global关键字无效。global绑定全局变量。
nonlocal关键字:与global关键字功能相似,但用于嵌套函数(nested function)中。nonlocal绑定局部变量,只对局部起作用,离开嵌套函数,那么该变量则无效。
以上内容主要参考:https://www.geeksforgeeks.org/global-local-variables-python/
以下为测试代码:
var = 6
if var == 1:
# reference: https://www.geeksforgeeks.org/global-local-variables-python/
def f(): # Creating local variables
s = "I love Geeksforgeeks" # local vairable
print("Inside Function:", s)
f()
#print("s:", s) # NameError: name 's' is not defined
elif var == 2:
# reference: https://www.geeksforgeeks.org/global-local-variables-python/
# Defining and accessing global variables
def f(): # This function uses global variable s
print("Inside Function:", s)
# Global scope
s = "I love Geeksforgeeks" # global variable, is used both inside the f function as well as outside the f function
f()
print("Outside Function:", s)
elif var == 3:
# reference: https://www.geeksforgeeks.org/global-local-variables-python/
# This function has a variable with name same as s
def f():
#s += 'GFG' # UnboundLocalError: local variable 's' referenced before assignment
s = "Me too." # 如果在函数作用域内也定义了同名变量,那么它将仅打印函数内部给出的值,而不是全局值
print(s)
s = "I love Geeksforgeeks" # global scope
f()
print(s) # I love Geeksforgeeks
elif var == 4:
# reference: https://www.geeksforgeeks.org/global-local-variables-python/
# This function modifies the global variable 's'
def f():
global s # 如果我们要进行赋值或更改全局变量,我们只需要在函数中使用global关键字
s += ' GFG'
print(s)
s = "Look for Geeksforgeeks Python Section"
print(s)
s = "Python is great!" # global scope
f()
print(s) # Look for Geeksforgeeks Python Section
elif var == 5:
# reference: https://www.geeksforgeeks.org/use-of-nonlocal-vs-use-of-global-keyword-in-python/
def fun():
var1 = 10
def gun():
nonlocal var1 # tell python explicitly that it has to access var1 initialized in fun using the keyword nonlocal
# global var1; var1 = var1 + 10 # NameError: name 'var1' is not defined
var1 = var1 + 10
print(var1) # 20
gun()
print(var1) # 20
fun()
elif var == 6:
# reference: https://www.geeksforgeeks.org/python-nonlocal-keyword/
def geek_func():
geek_name = "geekforgeeks" # local variable to geek_func
def geek_func1(): # First Inner function
geek_name = "GeekforGeeks"
def geek_func2(): # Second Inner function
nonlocal geek_name # Declairing nonlocal variable
geek_name = 'GEEKSFORGEEKS'
print(geek_name) # Printing our nonlocal variable, GEEKSFORGEEKS
geek_func2() # Calling Second inner function
geek_func1() # Calling First inner function
print(geek_name) # Printing local variable to geek_func, geekforgeeks
geek_func()
print("test finish")
以上是关于Python3中global/nonlocal用法的主要内容,如果未能解决你的问题,请参考以下文章
python ????????????????????????????????????????????????????????????global???nonlocal
python 函数动态参数,名称空间,global,nonlocal
Python迭代器和关键字 global ,nonlocal
函数的名称空间,函数的嵌套(global, nonlocal),函数名的运用