龙空技术网

python函数四

springapp 186

前言:

此时看官们对“python函数里面嵌套定义函数”都比较关切,姐妹们都需要学习一些“python函数里面嵌套定义函数”的相关资讯。那么小编在网络上网罗了一些对于“python函数里面嵌套定义函数””的相关内容,希望朋友们能喜欢,同学们快快来学习一下吧!

函数嵌套与闭包

在python中,函数嵌套(函数嵌套调用)与闭包是不同的概念。

函数嵌套: 在外部函数里调用内部函数,并将内部函数的调用结果返回出去。闭包:在外部函数里,直接将内部函数对象返回出去。

def outer_function(num):    """函数嵌套"""    def inner_function():        print("这是内部函数。")    inner_function()outer_function(5)

在嵌套函数中,inner_function 只能在 outer_function 内部调用,不能从外部调用。

def outer_function(num):    """闭包"""    def inner_function():        print(num)    return inner_functionclosure = outer_function(5)closure()  # 输出 5# 没有中间变量,连续两个圆括号进行调用outer_function(5)()

在闭包中,outer_function 执行结束,inner_function 依然可以访问 outer_function 中的 num。这是因为 inner_function 可以访问其定义时所在的作用域的变量。

装饰器

在Python中,装饰器是一种设计模式,用于扩展其他函数的行为。装饰器可以在不修改原函数代码的情况下,为函数添加额外的功能或行为。

装饰器使用 `@` 符号进行标记,并放置在要修饰的函数定义之前。下面是一个简单的装饰器示例:

from time import sleepimport timedef record_time(func):    """拦截business函数调用"""    def wrapper():        start = time.time()        func()        stop = time.time()        print(f"函数运行花费{stop - start}秒")    return wrapper  @record_timedef business():    """业务函数"""    print("业务处理中")    sleep(3)business()
内置装饰器

@wraps 装饰器,在编写装饰器时保留原函数的元数据,例如函数名、文档字符串、参数列表等。如果不使用 wraps 装饰器,那么在应用装饰器后,原函数的元数据可能会被修改或消失。

# 继续承接上面的例子business.__name__wrapper #输出结果from functools import wraps# @wraps优化装饰器def record_time(func):    """拦截business函数调用"""    @wraps(func)    def wrapper():        start = time.time()        func()        stop = time.time()        print(f"函数运行花费{stop - start}秒")    return wrapperbusiness.__name__business #输出结果

LRU Cache(最近最少使用缓存Latest Recent Use)是一种缓存策略,它可以在有限的内存中存储最常用的数据,并在缓存空间满时自动淘汰最不常用的数据。在Python中,可以使用 functools 模块中的 lru_cache 装饰器来实现 LRU Cache。下面是一个简单的示例:

from functools import lru_cache@lru_cache(maxsize=3)def fibonacci(n):    print("真实计算,不走缓存")    if n <= 1:        return n    else:        return fibonacci(n-1) + fibonacci(n-2)print(fibonacci(3))真实计算,不走缓存2print(fibonacci(3))2print(fibonacci(3))2

标签: #python函数里面嵌套定义函数