python闭包和装饰器

闭包

通过func1函数拿到func2函数的返回值

1.在全局调用函数

代码如下:

def func1():
    def func2():
        return "func2"
    #函数名没有加括号的时候不算调用,只是个地址
    print("函数内部",id(func2),func2)
    return func2   #通过return将内部的函数地址返回
f2=func1()     #执行函数需要加括号
a=f2()   #执行func1函数内部的func2函数
print("打印func1内部的func2函数的返回值:",a)

运行结果:


python闭包和装饰器

调试:

python闭包和装饰器

python闭包和装饰器

python闭包和装饰器

python闭包和装饰器

python闭包和装饰器

python闭包和装饰器

python闭包和装饰器

python闭包和装饰器

python闭包和装饰器

python闭包和装饰器

python闭包和装饰器

2.在局部调用函数

方法一:

代码如下:

def func1():
    def func2():
        return "func2"
    f2=func2()  #属于在局部调用函数
    print(f2)
func1()

运行结果:

python闭包和装饰器

方法二:

代码如下:

def func1():
    def func2():
        return "func2"
    print("func2:",func2)#一个地址,没有调用函数
    f2=func2 #函数地址赋值操作
    print("f2:",f2)
    #执行函数操作
    print(func2(),"
",f2()) #局部
    return func2
func1()

运行结果:

python闭包和装饰器

3.传参

代码如下:

def func1(name):
    def func2():
        return "This is "+name
    return func2
f2=func1("hello")
print(f2())

运行结果:


python闭包和装饰器

代码如下:

def s1(z):
    def s2(x,y):
        return x*y*z
    return s2
s2=s1(4)
sss=s2(2,3)
print(sss)

运行结果:

python闭包和装饰器

装饰器

不传参

1.运行原理

代码如下:

#添加的功能
def func1(host):
    def func2():
        print("你好英文:")
        host()  #主函数运行的位置
    return func2
#主函数
def host():
    print("hello")
func2=func1(host)
func2()

运行结果:

python闭包和装饰器

2.基本使用

代码如下:

#添加的功能
def func1(host):
    def func2():
        print("你好英文:")
        host()  #主函数运行的位置
    return func2
#主函数
@func1
def host():
    print("hello")
host()

运行结果:

python闭包和装饰器

传参

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("冰淇淋")

运行结果:

python闭包和装饰器

2.基本使用

代码如下:

def func1(host):
    def func2(name):
        print(name,"什么好吃")
        host(name)  #主函数运行的位置
        print(name,"10元")
    return func2
#主程序
@func1
def host(name):
    print(name,"好吃的零食")
host("冰淇淋")

运行结果:

python闭包和装饰器

三.返回值

代码如下:

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)

运行结果:

python闭包和装饰器

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章