您的当前位置:首页正文

Python中的全局变量和局部变量的区别(代码详解)

2020-11-27 来源:客趣旅游网

全局变量是在函数外部定义和声明的变量,我们需要在函数内部使用它们。

#这个函数使用全局变量s
def f(): 
 print s 
 
# 全局作用域
s = "I love Python"
f()

输出:

I love Python

如果在函数范围内定义了具有相同名称的变量,那么它将仅打印函数内给出的值而不是全局值。

# 这个函数有一个与s同名的变量。
def f(): 
 s = "Me too."
 print s 
 
# 全局作用域
s = "I love Python" 
f() 
print s

输出:

Me too
I love Python

在我们调用函数f()之前,变量s被定义为字符串“I love Python”。f()中唯一的语句是“print s”语句。由于没有本地s,将使用全局s的值。

问题是,如果我们改变函数f()内部的s值会发生什么?它会影响全局吗?

我们在下面的代码中测试它:

def f(): 
 print s 
 
 # 如果我们在下面评论,这个程序不会显示错误。
 s = "Me too."
 
 print s 
 
#全局作用域
s = "I love Python" 
f() 
print s

输出:

Line 2: undefined: Error: local variable 's' referenced before assignment

为了使上述程序有效,我们需要使用“global”关键字。如果我们想要进行分配/更改它们,我们只需要在函数中使用全局关键字。打印和访问不需要全局。

Python“假设”我们想要一个局部变量,因为f()内部的赋值,所以第一个print语句抛出此错误消息。在函数内部更改或创建的任何变量都是本地的,如果它尚未声明为全局变量。要告诉Python,我们要使用全局变量,我们必须使用关键字“global”

如以下示例所示:

# 这个函数修改全局变量's' 
def f(): 
 global s 
 print s 
 s = "Look for Python"
 print s 
 
#全局作用域
s = "Python is great!" 
f() 
print s

输出:

Python is great!
Look for Python.
Look for Python.

一个很好的例子:

a = 1
 
# 使用global,因为没有本地'a' 
def f(): 
 print 'Inside f() : ', a 
 
#变量“a”被重新定义为局部变量
def g(): 
 a = 2
 print 'Inside g() : ',a 
 
#使用全局关键字修改全局'a'
def h(): 
 global a 
 a = 3
 print 'Inside h() : ',a 
 
# 全局作用域
print 'global : ',a 
f() 
print 'global : ',a 
g() 
print 'global : ',a 
h() 
print 'global : ',a

输出:

global : 1
Inside f() : 1
global : 1
Inside g() : 2
global : 1
Inside h() : 3
global : 3
显示全文