python的闭包

54 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情

大家好,我是木大木大,因为疫情和环境原因啊,在家开始了自学python的路子,从此深坑加一人。后面我会每天持续更新一些学习python的过程,当然一开始就是一些基础啦,希望大家多多支持,莫嫌弃啦~

闭包与装饰器

1.1 闭包

def f():
    x = 10
    def g():
        print(x)
    return g
f()() #f()——》g
def f():
    x = 10
    def g():
        print(x)
    return g
h = f() #f()——》g
h()
闭包:如果在一个内部函数里面,对在外作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包
闭包 = 内部函数 + 定义函数时的环境
def f(x):
    def g():
        print(x)
    return g
h = f(1)
h()

1.2 装饰器

2.2.1 无参

模块 time 时间模块
要导包  import time
time.time()  # 指的是19700101000000秒起止到现在的总秒数
import time
def foo():
    start = time.time()
    print("foo..")
    time.sleep(1)  # sleep可以休眠程序,括号里面是休眠几秒
    end = time.time()
    print(f"运行了{end-start}秒")
foo()

# 计算时间的代码分离出来单独作为一个函数,原函数不动
import time
def foo():
    print("foo..")
    time.sleep(1)  # sleep可以休眠程序,括号里面是休眠几秒
def show_time(func):  # 这个函数的功能是帮忙展示时间的
    start = time.time()
    func()
    end = time.time()
    print(f"运行了{end - start}秒")
show_time(foo)

func调用位置
time是如何调用的
装饰器:在不修改源代码的基础上给函数添加一个新的功能
import time
def foo():
    print("foo..")
def bay():
    print("bay...")
def show_time(func):  # 这个函数的功能是帮忙展示时间的
    def inner():
        start = time.time()
        func()
        time.sleep(1) # sleep可以休眠程序,括号里面是休眠几秒
        end = time.time()
        print(f"运行了{end - start}秒")
    return inner
foo = show_time(foo)
foo()
bay = show_time(bay)
bay()
@  语法糖
import time
def show_time(func):  # 这个函数的功能是帮忙展示时间的
    def inner():
        start = time.time()
        func()
        time.sleep(1) # sleep可以休眠程序,括号里面是休眠几秒
        end = time.time()
        print(f"运行了{end - start}秒")
    return inner

@ show_time  # foo = show_time(foo)
def foo():
    print("foo..")
foo()
@ show_time
def bay():
    print("bay...")
bay()

2.2.2 原函数参数

import time
def show_time(func):  # 这个函数的功能是帮忙展示时间的
    def inner(a,b):
        start = time.time()
        func(a,b)
        time.sleep(1) # sleep可以休眠程序,括号里面是休眠几秒
        end = time.time()
        print(f"运行了{end - start}秒")
    return inner
@ show_time
def add(a,b):
    print(a+b)
add(1,2)
import time

def show_time(func):  # 这个函数的功能是帮忙展示时间的
    def inner(*args,**kwargs):
        start = time.time()
        func(*args,**kwargs)
        time.sleep(1) # sleep可以休眠程序,括号里面是休眠几秒
        end = time.time()
        print(f"运行了{end - start}秒")
    return inner
@show_time  # add1 = show_time(add1)
def add1(*args,**kwargs):
    result = 0
    for i in args:
        result+=i
    print(result)
add1(1,2,3,4,5,6)

今天的内容就到这里啦,感谢观看吖~