目录
一.摘要
二.闭包
1.在全局调用函数
2.在局部调用函数
3.传参
三.装饰器
1.不传参
2.传参
3.返回值
一.摘要
闭包:在一个内部函数中,对外部作用域的变量进行引用,(并且一般外部函数的返回值为内部函数),那么内部函数就被认为是闭包。
装饰器:给原有的功能(函数)添加一个新函数。
二.闭包
1.在全局调用函数
代码如下:
def func1():
def func2():
return "func2"
#函数名没有加括号的时候不算调用,只是个地址
print("函数内部",id(func2),func2)
return func2 #通过return将内部的函数地址返回
f2=func1() #执行函数需要加括号
a=f2() #执行func1函数内部的func2函数
print("打印func1内部的func2函数的返回值:",a)
运行结果:
2.在局部调用函数
方法一:
代码如下:
def func1():
def func2():
return "func2"
f2=func2() #属于在局部调用函数
print(f2)
func1()
运行结果:
方法二:
代码如下:
def func1():
def func2():
return "func2"
print("func2:",func2)#一个地址,没有调用函数
f2=func2 #函数地址赋值操作
print("f2:",f2)
#执行函数操作
print(func2(),"n",f2()) #局部
return func2
func1()
运行结果:
3.传参
①
代码如下:
def func1(name):
def func2():
return "This is "+name
return func2
f2=func1("hello")
print(f2())
运行结果:
②
代码如下:
def s1(z):
def s2(x,y):
return x*y*z
return s2
s2=s1(4)
sss=s2(2,3)
print(sss)
运行结果:
三.装饰器
1.不传参
1.执行原理
代码如下:
#添加的功能
def func1(host):
def func2():
print("你好英文:")
host() #主函数运行的位置
return func2
#主函数
def host():
print("hello")
func2=func1(host)
func2()
运行结果:
2.基本使用
代码如下:
#添加的功能
def func1(host):
def func2():
print("你好英文:")
host() #主函数运行的位置
return func2
#主函数
@func1
def host():
print("hello")
host()
运行结果:
2.传参
1.运行原理
代码如下:
def func1(host):
def func2(name):
print(name,"什么好吃")
host(name) #主函数运行的位置
print(name,"10元")
return func2
#主程序
def host(name):
print(name,"好吃的零食")
func2=func1(host)
func2("冰淇淋")
运行结果:
2.基本使用
代码如下:
def func1(host):
def func2(name):
print(name,"什么好吃")
host(name) #主函数运行的位置
print(name,"10元")
return func2
#主程序
@func1
def host(name):
print(name,"好吃的零食")
host("冰淇淋")
运行结果:
3.返回值
代码如下:
def func1(host):
def func2(name):
print(name,"什么好吃")
host(name) #主函数运行的位置
result=host(name)
print(name,"10元")
return result #装饰器的返回值在闭包内部返回的
return func2
#主程序
@func1
def host(name):
return name+"好吃的零食"
result=host("冰淇淋")
print(result)
运行结果:



