【Python学习】函数篇-进阶

1. 闭包

Python函数是支持嵌套的。如果在一个内部函数中对外部函数作用域(非全局作用域)的变量进行引用,那么内部函数就会被称为闭包。闭包需要满足如下3个条件:

  • 存在于两个嵌套关系的函数中,并且闭包是内部函数;
  • 内部函数引用了外部函数的变量(自由变量);
  • 外部函数会把内部函数的函数名称返回。(不带括号)

在这里插入图片描述

2. 装饰器

2.1 装饰器的概念

假设我们已经开发了一个本有的函数,后续可能会增加临时的需求,例如插入日志,我们可以增加一个包裹函数,由它来负责这些额外的需求,这个包裹函数就是装饰器 。

2.2 装饰器主要应用在如下场景

引入日志;| 执行函数后清理功能;
函数执行时间统计;|权限校验;
执行函数前预备处理;
缓存。

2.3 实例

装饰器是一个函数,它需要接收一个被修饰的函数作为参数。例如,有如下一个装饰器函数:

def w1(func):
    print('正在装饰')
    def inner():
        print('正在验证权限')
        func()
    return inner

装饰器是个嵌套函数
内部函数是一个闭包
外部函数接收的是被修饰的函数(func)

通过在函数定义的前面添加@符号和装饰器名,实现装饰器对函数的包装。给f1函数加上装饰器,示例如下:

@w1
def f1():
    print('f1')

调用f1时候,程序会自动编译生成调用装饰器函数的代码,等价于:

f1 = w1(f1)

2.4 多个装饰器

多个装饰器应用在一个函数上,是一个嵌套的关系,调用顺序是从下至上,再从上至下。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.5 装饰有参数的函数

在这里插入图片描述

2.6 装饰带有返回值的函数

在这里插入图片描述

扫描二维码关注公众号,回复: 14369282 查看本文章

2.7 带有参数的装饰器

如果给装饰器添加参数,需要增加一层包装,先传递参数,然后再传递函数名。示例代码如下:
在这里插入图片描述

3.常见python内置函数

3.1 map函数

map函数会根据提供的函数对指定的序列做映射。

map函数的定义如下:

map(function, iterable,)

第1个参数是函数的名称;第2个参数表示支持迭代的容器或者迭代器。

map函数的作用是以参数序列中的每个元素分别调用function函数,把每次调用后返回的结果保存为对象。

例:

func = lambda x:x+2
result = map(func, [1,2,3,4,5])
print(list(result))

在这里插入图片描述

3.2 filter函数

filter函数会对指定序列执行过滤操作。

filter函数的定义如下:

filter(function,iterable)

第1个参数可以是函数的名称;第2个参数表示的是序列、支持迭代的容器或迭代器。

例:

func = lambda x:x%2
result = filter(func, [1, 2, 3, 4, 5])
print(list(result))

在这里插入图片描述

3.3 reduce函数

reduce函数会对参数序列中的元素进行迭代运算。

reduce函数的定义如下:

reduce(function, iterable[, initializer])
  • function是一个带有两个参数的函数;
  • iterable是一个可迭代对象;
  • initializer表示固定的初始值。

函数实现原理:
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

例:

from functools import reduce
func = lambda x,y:x+y
result = reduce(func, [1, 2, 3, 4, 5])
print(result)

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_53306029/article/details/124814011