1.global关键字
Python使用了shadowing屏蔽机制,当在函数中试图修改全局变量时,系统会生成一个变量供函数修改,而本身的全局变量不会发生改变。
所以当一定要修改全局变量时,就要用到global关键字了
>>>def myfun():
global cout
cout = 10
print(cout)
>>>myfun()
>>>10
>>>print(cout)
>>>10
2.内嵌(部)函数
Python允许在函数内部创建另一个函数
>>> def fun1():
print('fun1()正在被调用...')
def fun2():
print('fun2()正在被调用...')
fun2()
>>> fun1()
fun1()正在被调用...
fun2()正在被调用...
内部函数的整个作用域都在外部函数之内;
也就是只能在fun1()函数中调用fun2()函数,出了fun1()函数就没有任何对fun2()函数调用的方式了。
3.闭包
如果在一个内部函数中对外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就会被认为是闭包。
闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。 —百度百科
对于内部函数来说,只能对外部函数的变量进行访问,而不能直接修改。
>>>def fun1():
x = 5
def fun2():
x *= x
return x
return fun2()
'''在此函数中,fun2()函数不能对x进行直接修改。'''
因此,可以通过将x修改为列表来解决此问题,因为列表不是存放在栈职中的
>>> def fun1():
x = [5]
def fun2():
x[0] *= x[0]
return x[0]
return fun2()
>>> fun1()
25
另外,还可以使用nonlocal关键字进行修改
>>> def fun1():
x = 5
def fun2():
nonlocal x
x *= x
return x
return fun2()
>>> fun1()
25