函数的作用域
外部不能访问函数内部变量
def func():
a = 1
return a
print(a)
# 输出不了
函数内部能够访问函数外部变量
x = 1
def func():
print(x)
func()
# 输出 1
函数里面不能修改函数外部变量
x = 1
def func():
x = 2
print(x)
func() # 输出2
print(x) # 输出1
函数里面和函数外部变量名相同,id不同
x = 0
def func():
x = 3
print(id(x))
func() # 140731880075600
print(id(x)) # 140731880075504
全局变量与局部变量
全局变量
关键字:global
a = 0
def func():
global a
a = 3
func()
print(a) # 输出 3,因为全局变量给他重新赋值了
局部变量
关键字:nonlocal
局部变量针对的嵌套函数,未nonlocal声明,只能访问,不能改变
- 嵌套函数:函数里面包裹了其他函数
def func():
x = 1
def demo():
nonlocal x
x += 1
print(x)
demo()
func()
# 输出 2
闭包函数
返回内嵌函数
def func(x):
x += 1
print('func执行')
def demo():
print('demo执行')
return x*2
return demo()
num = func(1)
print(num)
# func执行
# demo执行
# 4
def func(x):
x += 1
print('func执行')
def demo(y):
print('demo执行')
return x*y
return demo
num = func(1)
print(num(3))
# func执行
# demo执行
# 6
当有多个内嵌函数
def func(x):
x += 1
print('func执行')
def demo1(y):
print('demo1执行')
return x*y
def demo2(z):
print('demo2执行')
return x+z
return demo1, demo2
# 拆包调用
num1, num2 = func(1)
print(num1(3))
print(num2(3))
# func执行
# demo1执行
# 6
# demo2执行
# 5
也可以下标调用
def func(x):
x += 1
print('func执行')
def demo1(y):
print('demo1执行')
return x*y
def demo2(z):
print('demo2执行')
return x+z
return demo1, demo2
# 下标调用
num = func(1)
print(num[1](4))
# func执行
# demo2执行
# 6
回调函数
在函数里面调用其他函数
def func():
print('func被调用')
def demo(function, num):
if num == 1:
function()
else:
print('张三')
demo(function=func, num=1)
# func被调用
递归函数
循环套用,函数自己调用自己,有限制次数
def demo(num):
if num == 1:
return num
return num*demo(num-1)
a = demo(5)
print(a)
# 输出 120