变量作用域

局部变量和全局变量

所谓局部变量,指的是定义在函数内的变量,只能在函数内使用,它与函数外具有相同名称的其他变量没有任何关系。不同函数中,可以使用相同名字的局部变量,它们代表不同对象,互不干扰。此外,函数的形式参数也属于局部变量,作用范围仅限于函数内部。

在函数之外定义的变量称为全局变量,全局变量在整个程序范围内有效。

a = 0	# 全局变量a
def sum(x,y):
    a = x+y		# 局部变量a
    print('函数内是局部变量:',a)
    return a
sum(10,20)
print('函数外是全局变量:',a)

运行结果:

函数内是局部变量:30
函数外是全局变量:0    

tips:写程序最好不要用两个名字相同的变量,容易引起歧义。

global 和 nonlocal关键字

当内部作用域想要使用外部作用域的变量是,可使用global和nonlocal关键字。

  1. global关键字

在函数内部修改一个定义在函数外的变量是,须使用global关键字明确声明变量。在函数内部通过global关键字来声明或定义全局变量,可分为两种情况:

(1)一个变量已在函数外定义,如果在函数内需要使用该变量的值或修改该变量的值,并将修改结果反映到函数外,可以在函数内用关键字global明确声明该全局变量。

(2)在函数内部直接使用global关键字将一个变量声明为全局变量,如果在函数外没有定义该全局变量,在调用该函数后,会创建新的全局变量。

num = 1
def fun():
    global num
	num += 1
    print('函数内num的值为:',num)
fun()
print('函数外num的值为:',num)

运行结果为:

函数内num的值为:2
函数外num的值为:2

tips:在函数内用global关键字将变量num声明为全局变量,因此,在函数内变量num的初始值也为1,执行num+=1后,num的值为2,并将修改的结果反映到函数外,因此函数外的num输出也为2。

  1. nonlocal关键字

如果要在一个嵌套的函数中修改嵌套作用域中的变量,则须使用nonlocal关键字。

def outer():
    num = 1
    def inner():
        nonlocal num	# nonlocal 关键字声明
        num = 2
        print('inner函数中的num值为:',num)
    inner()	# 调用inner函数
    print('outer函数中num的值为:',num)
outer()	# 调用outer函数    

运行结果为:

inner函数中的num值为:2
outer函数中num的值为:2

tips:在inner函数中使用了nonlocal关键字,就会告诉python在inner()函数中使用了outer()函数中的变量num,对变量num进行修改时,会直接影响outer()函数中的num变量。因此,程序在inner()函数和outer()函数中的输出都是2。

posted @ 2021-11-04 15:23  Cara_Smith  阅读(342)  评论(0编辑  收藏  举报