前言:
此时看官们对“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函数里面嵌套定义函数