局部变量和全局变量
所谓局部变量,指的是定义在函数内的变量,只能在函数内使用,它与函数外具有相同名称的其他变量没有任何关系。不同函数中,可以使用相同名字的局部变量,它们代表不同对象,互不干扰。此外,函数的形式参数也属于局部变量,作用范围仅限于函数内部。
在函数之外定义的变量称为全局变量,全局变量在整个程序范围内有效。
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关键字。
- 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。
- 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。