函数作用域
global和nonlocal关键字
思考:
def func():
name = 'laowang'
print(name) # 能打印吗?
func()
print(name) # 能打印吗?
执行结果:
laowang
NameError: name 'name' is not defined 为什么没有被定义?
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。
调用函数时,所有在函数内声明的变量名称都将被加入到作用域中
当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了。
1、global
能够在函数里修改全局变量的值。
a = 100 # 全局变量
def func1():
global a # 修改全局变量
a = 200
print(a)
func1()
print(a)
执行结果:
200
200
2、nonlocal
让嵌套函数能够修改嵌套函数之外的值,就是用来修改嵌套作用域的变量的。
def func1():
x = 100
def func2():
nonlocal x
x += 100
return x
return func2()
a = func1()
print(a)
执行结果:
200
递归
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
实例 1:
# 递归
def fibonacci(a):
if a == 0: # 简写 if a == 0 or a == 1: 与或非 逻辑运算符
return 0
elif a == 1:
return 1
else:<