python之函数:二
Posted zengmu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之函数:二相关的知识,希望对你有一定的参考价值。
本文从以下几个方面入手更多了解python函数:
- 函数中的变量作用域
- 函数中的闭包现象
- 函数中的装饰器
- 标准库中的装饰器
- 叠加装饰器
- 参数化装饰器模式
def A(func):
def B():
return
return B
函数中的LEGB原则:即本地作用域->外部作用域->全局作用域->到此就可以了...
对于函数B而言 B的函数体叫本地作用域,A的函数体叫B的外部作用域,A所在的文件是B的全局作用域
如果需要在B中进行全局变量的修改q请使用global关键字对变量进行申明
函数中的闭包:
对于B的函数体能够调用A作用域下的变量 c的行为称为闭包 标准的定义:非全局作用域下的函数能够记住它被命名的封闭空间(B封闭于A)
其中变量Cc称之为自由变量 :指未在本地作用域中绑定的变量 q其中使用nonlocal去申明自由变量 (如同global)
装饰器:
定义:能够增强函数的行为 在目标函数前执行l另一个函数对目标函数进行修饰
表现:形如ex就是一个装饰器
使用: @A
def target():
pass
参数化装饰器:都知道装饰器接受目标函数的函数名作为参数进行传递,那么如果被装饰的目标函数带有参数怎么办?
在装饰器外面在嵌套一层函数,去处理目标函数的参数问题
def add(*args,**kwargs):
def A(func):
def B(*args,**kwargs):
return res
return B
return A
其中add函数c称之为g工厂函数,专门用来处理目标函数的参数问题
标准库中的装饰器:
functools.lru_cache 其中lru_cache 是 least recently used 对最近执行过的函数 做一个记录 避免重复执行
功能就是备忘,极大简化运行时间
functools.singledispatch d单点分发
这种设计模式z在 Djangoh和 REST frameworkz 的CBV模式中也有体现
根据第一个参数的类型来以不同的方式执行同一组函数
(多分派 :根据多个参数来选择专门的函数)
以上是关于python之函数:二的主要内容,如果未能解决你的问题,请参考以下文章