当前位置: 首页 > 科技观察

初看Python:全局变量、局部变量和非局部变量(附示例)

时间:2023-03-19 19:59:25 科技观察

全局变量在Python中,在函数外部或全局范围内声明的变量称为全局变量。这意味着,可以在函数内部或外部访问全局变量。让我们看一个关于如何在Python中创建全局变量的示例。示例1:创建一个全局变量x="global"deffoo():print("xinside:",x)foo()print("xoutside:",x)当我们运行代码时,它会输出:xinside:globalxoutside:global在上面的代码中,我们创建了x作为一个全局变量,并定义了一个foo()来打印全局变量x。***,我们调用foo()来打印x的值。如果你想在一个函数中改变x的值怎么办?x="global"deffoo():x=x*2print(x)foo()当我们运行代码时,它会输出:UnboundLocalError:localvariable'x'referencedbeforeassignment输出显示错误,因为Python将x被视为局部变量,并且x未在foo()内部定义。为此,我们使用global关键字,请参阅PythonGlobal关键字了解更多信息。局部变量在函数体内或局部范围内声明的变量称为局部变量。示例2:访问作用域外的局部变量deffoo():y="local"foo()print(y)当我们运行代码时,它会输出:NameError:name'y'isnotdefined输出显示了一个error,因为我们试图在全局范围内访问局部变量y,而局部变量仅在foo()函数内部或局部范围内有效。让我们看一个关于如何在Python中创建局部变量的示例。示例3:创建局部变量通常,我们在函数内部声明一个变量来创建局部变量。deffoo():y="local"print(y)foo()当我们运行代码时,会输出:local我们再看前面的问题,其中x是一个全局变量,我们要修改foo()x里面。全局变量和局部变量这里我们将展示如何在同一代码中使用全局变量和局部变量。示例4:在同一代码中使用全局变量和局部变量x="global"deffoo():globalxy="local"x=x*2print(x)print(y)foo()当我们运行代码时,会输出(LCTT译注:原输出结果中的两个全局变量有空格,正确的没有空格):globalgloballocal上面代码中,我们声明x为全局变量,y声明为foo()局部变量。然后,我们使用乘法运算符*修改全局变量x,并打印x和y。调用foo()后,x的值变成了globalglobal(LCTT译注:原文也有空格,正确的是没有空格),因为我们用x*2打印了两次global。局部变量y,即local。示例5:具有相同名称的全局变量和局部变量x=5deffoo():x=10print("localx:",x)foo()print("globalx:",x)当我们运行代码时,将输出:localx:10globalx:5在上面的代码中,我们为全局变量和局部变量使用了相同的名称x。当我们打印同一个变量时,我们得到不同的结果,因为该变量在两个范围内声明,即foo()内部的局部范围和foo()外部的全局范围。当我们在foo()中打印变量时,它会打印出localx:10,这称为变量的局部作用域。同样,当我们在foo()之外打印变量时,它会打印globalx:5,这被称为变量的全局范围。非局部变量非局部变量用于局部作用域未定义的嵌套函数中。这意味着,变量既不能在局部范围内,也不能在全局范围内。让我们看一个关于如何在Python中创建非局部变量的示例。(LCTT译者注:原文是创建全局变量,疑似笔误)我们使用nonlocal关键字来创建非局部变量。示例6:创建一个非局部变量defouter():x="local"definner():nonlocalxx="nonlocal"print("inner:",x)inner()print("outer:",x)outer()当我们运行代码时,它会输出:inner:nonlocalouter:nonlocal在上面的代码中有一个嵌套函数inner()。我们使用nonlocal关键字来创建非局部变量。inner()函数在另一个函数outer()的范围内定义。注意:如果我们改变一个非局部变量的值,改变会出现在局部变量中。