1.函数参数
def func01():
print("func01 is show")
# func01()
# 函数名存放的是函数所在空间的地址
# print(func01)
# 函数名也可以像普通变量一样进行赋值
# func02 = func01
# func02()
def foo(func):
func()
foo(func01)
2.闭包
# 闭包的构成条件:
# 1在函数嵌套(函数里面再定义函数)的前提下
def func_out(num1): # num1=10
def func_inner(num2): # num2=1
# 2内部函数使用了外部函数的变量(还包括外部函数的参数)
num = num1 + num2
print("现在的值:", num)
# 3外部函数返回了内部函数
return func_inner
# 创建闭包实例
f = func_out(10) # f = func_inner
# 执行闭包
f(1) # func_inner(1)
f(2)
3.闭包的使用
# 外部函数
def config_name(name):
# 内部函数
def say_info(info):
print(name + ":", info)
return say_info
tom = config_name("花花")
tom("你好")
tom("你在么")
jerry = config_name("草草")
jerry("你好")
jerry("我在呢")
4.nonlocal的使用
# 外部函数
def func_out(num1): # num1=10
# 内部函数
def func_inner(num2): # num2=10
nonlocal num1
num1 = num2 + 10 # num1=20
print(num1)
func_inner(10)
print(num1)
return func_inner
# num1 = 10
# f = func_out(10)
# 调用闭包 = 内部函数 num2 = 10
# f(10)
func_out(10)
5.装饰器
# 定义装饰器
def check(fn): # fn=comment
def inner():
print("登录验证功能===")
fn() # comment()
return inner
def comment():
print("发表言论=====")
comment = check(comment) # check(comment) = inner ===> comment=inner
comment() # inner()
6.装饰器的语法糖
# 定义装饰器
def check(fn): # fn=comment
def inner():
print("登录验证功能===")
fn() # comment()
return inner
@check # comment=check(comment)
def comment():
print("发表言论=====")
comment()
7.装饰器的使用
import time
# 定义装饰器
def get_time(fn):
def inner():
start = time.time()
fn()
end = time.time()
print("消耗的时间为:", end-start)
return inner
@get_time # func = get_time(func)
def func():
for i in range(100000):
print(i)
func()