一、定义

变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

二、分类

1.map函数

map() 函数接收两个参数,一个是函数,一个是序列, map 将传入的函数依次作用到序列的每个元素,并把结果作为新的 list 返回。

python-高阶函数

python-高阶函数

### *sum 表示可变参数,可接收多个值

python-高阶函数

map() 作为高阶函数,把运算规则抽象了.

练习: 把这list列表中的所有数字转为字符串;([1,2,3]---['1','2','3'])

python-高阶函数

2.reduce函数

reduce 把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce 把结果继续和序列的下一个元素做累积计算。

### 类加

python-高阶函数

### 阶乘

python-高阶函数

3.filter函数

filter() 也接收一个函数和一个序列。和 map() 不同的是,filter() 把传入的函数依次作用于每个元素,然后根据返回值是 True
还是 False 决定保留还是丢弃该元素。

###在一个 list 中,删掉偶数,只保留奇数:

python-高阶函数

###删除100以内的质数

python-高阶函数

4.sorted函数

• 排序也是在程序中经常用到的算法。 无论使用冒泡排序还是快速
排序,排序的核心是比较两个元素的大小。通常规定如下:
    x < y, return -1
    x == y, return 0
    x > y, return 1

# 排序: 由小到大,sorted函数(默认reverse=False

# 排序: 由大到小, reverse=True, 代表排序后进行反转;

python-高阶函数

### 对不同类型的手机电脑品牌以销售量和单价进行排序

python-高阶函数


python-高阶函数

python-高阶函数

python-高阶函数

###sorted 函数应用

(携程笔试)

给定一个整形数组,将数据中所有的0移动到末尾,非0向保持不变;

在原始数组上进行移动操作,误创建新的数据;

#输入:

            第一行是数组长度,后续每一行是数组的一条记录;

               4

                0

                7

                0

                2

#输出:

                调整后数组的内容

                   7

                   2

                   0

                   0

python-高阶函数

#### 将0移动到开头

python-高阶函数

#### 匿名函数:将0移动到开头

    python-高阶函数

#### 对字符串排序

例:将字符串“apple” 排在最后,

python-高阶函数

5.返回值是函数

# 闭包: 函数里面嵌套函数;

python-高阶函数

###求和

python-高阶函数

#  f = lazy_sum(1,2,3,4)  调用 lazy_sum() 时,返回的并不是求和结果,而是求和函数

#  f()   #调用函数 f 时,才真正计算求和的结果

##   调用 lazy_sum() 时,每次调用都会返回一个新的函数,即使传入相同的参数

python-高阶函数

6.匿名函数

•当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。
•关键字 lambda 表示匿名函数,冒号前面的 x 表示函数参数

python-高阶函数

• 匿名函数有只能有一个表达式,不用写 return ,返回值就是该表达式的结果。
• 因为匿名函数没有名字,不必担心函数名冲突。 此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数;

python-高阶函数

##也可以把匿名函数作为返回值返回

python-高阶函数

##累加

python-高阶函数

## 可变参数和关键字参数

python-高阶函数

三、装饰器

# 装饰器: 用来装饰函数 ,或装饰类

# 装饰器函数基本格式:
def 装饰器名称(fun):
    @functools.wraps(fun)
    def wrapper(*args, **kwargs):
        pass
    return wrapper

# 使用装饰器函数

@装饰器名称     # hello = 装饰器名称(hello)    # hello = wrapper

    def hello():
        pass

# 调用函数

    hello()     # 实质执行的是wrapper函数
    hello.__name__

    hello.__doc__

### 装饰器第一个模版

python-高阶函数

 # 语法糖

#  @compute_time     <==>     hello = compute_time(hello)    
# hello()
#
#  @compute_time      <==>    hello1 = compute_time(hello1)
# hello1()

python-高阶函数

python-高阶函数

python-高阶函数

python-高阶函数

python-高阶函数

四、函数的解包

*args: 对列表或者元组进行解包的;

python-高阶函数

**kwargs:对字典解包

python-高阶函数

### 实现日志记录的装饰器函数

日志格式: 时间  函数名  运行时间:    运行结果:

python-高阶函数

python-高阶函数

###

python-高阶函数

python-高阶函数

### print(add.__name__)

### print(add.__doc__)

python-高阶函数

### 注释@functools.wraps(fun)后,结果为:

python-高阶函数

### 装饰器的第二个模版

##判断bbs账户是否登陆

python-高阶函数

python-高阶函数

python-高阶函数

python-高阶函数

python-高阶函数

###探究多个装饰器的执行顺序

# 当有多个装饰器时, 从下到上调用装饰器;

python-高阶函数




    

相关文章:

  • 2022-01-22
  • 2022-02-27
  • 2021-11-12
  • 2022-01-22
猜你喜欢
  • 2022-12-23
  • 2021-04-28
  • 2021-09-19
  • 2021-04-08
  • 2021-07-28
  • 2021-07-03
  • 2021-09-19
  • 2021-08-12
相关资源
相似解决方案