# Python 函数进阶-高阶函数

[En]

A higher-order function is a function that can pass a function as a parameter. In other words, if the parameter of a function is a function, then the function is a higher-order function.

定义高阶函数
def senior(func, container):
"""
将容器中的数据依次放入函数中进行运算，
将结果返回到迭代器中，最后返回迭代器。
"""
lst = list()
for i in container:
lst.append(func(i))
return iter(lst)

def tenfold(num):
"""
十倍器
将数据乘 10，返回结果。
"""
return num * 10

lst = [10, 20666, 'msr']

it = senior(tenfold, lst)
print(list(it)) # [100, 206660, 'msrmsrmsrmsrmsrmsrmsrmsrmsrmsr']


function：函数，可以是 自定义函数 或者是 内置函数；

iterable：可迭代对象，可迭代性数据。（容器类型数据和类容器类型数据、range对象、迭代器）

[En]

Take out the data in the iterable object one by one, then put it into the specified function for processing, put the processed results into the iterator in turn, and finally return the iterator.

lst = ['1', '2', '3', '4']

""" 使用常规的写法 """
new_lst = list()
for i in lst:
new_lst.append(int(i))
print(new_lst)  # [1, 2, 3, 4]

""" 使用map函数实现 """
it = map(int, lst)
new_lst = list(it)
print(new_lst)  # [1, 2, 3, 4]


lst = [1, 2, 3, 4]

""" 普通的方法，利用左移 """
new_lst = list()
for i in lst:
res = i << i
new_lst.append(res)
print(new_lst)  # [2, 8, 24, 64]

""" 使用map函数 """

def func(num):
return num << num
new_lst = list(map(func, lst))
print(new_lst)  # [2, 8, 24, 64]

""" 使用lambda简化 """
new_lst = list(map(lambda num: num << num, lst))
print(new_lst)  # [2, 8, 24, 64]


filter用于过滤数据，将可迭代对象中的数据一个一个的放入函数中进行处理，如果函数返回值为真，将数据保留；反之不保留，最好返回迭代器。

lst = [11, 2, 3, 34, 4, 4, 55]

""" 常规写法 """
new_lst = list()
for i in lst:
if i % 2 == 0:
new_lst.append(i)
print(new_lst)  # [2, 34, 4, 4]

""" 使用filter函数 """
def func(num):
if num % 2 == 0:
return True
new_lst = list(filter(func, lst))
print(new_lst)  # [2, 34, 4, 4]

""" filter + lambda """
new_lst = list(filter(lambda num: True if (num % 2 == 0) else False, lst))
print(new_lst)  # [2, 34, 4, 4]


[En]

Calculate the data, put the first two values of the iterable object in the function to do the operation, get the result and the third value in the function to get the result, and so on, until all the results are finished, return the final result.

reduce函数使用需要先从标准库functools中导入

from functools import reduce

lst = [2, 0, 6, 6, 6]

""" 常规方法 """
char = str()
for i in lst:
char += str(i)
print(int(char))    # 20666

""" 使用reduse函数 """
def func(x, y):
return x * 10 + y
res = reduce(func, lst)
print(res)  # 20666

""" reduce + lambda """
res = reduce((lambda x, y: (x * 10 + y)), lst)
print(res)  # 20666


iterable：可迭代对象；

key：指定函数，默认为空；

reverse：排序的方法，默认为False，意为升序；

[En]

Sort the data in the list.

lst = [1, 23, 34, 5, 6, 342, 12, 12, 2345, -3]

""" 使用列表的内置函数进行排序，默认升序 """
lst.sort()
print(lst)  # [-3, 1, 5, 6, 12, 12, 23, 34, 342, 2345]

lst.sort(reverse=True)
print(lst)  # [2345, 342, 34, 23, 12, 12, 6, 5, 1, -3]

lst = [1, 23, 34, 5, 6, 342, 12, 12, 2345, -3]
""" 使用sorted进行排序 """
new_lst = sorted(lst)
print(new_lst)  # [-3, 1, 5, 6, 12, 12, 23, 34, 342, 2345]
print(lst)      # [1, 23, 34, 5, 6, 342, 12, 12, 2345, -3]


lst = [1, 23, 34, 5, 6, 342, 12, 12, 2345, -3]

""" 按照绝对值进行排序 """
new_lst = sorted(lst, key=abs)
print(new_lst)  # [1, -3, 5, 6, 12, 12, 23, 34, 342, 2345]

""" 按照除以10的余数进行排序 """
def func(num):
return num % 10
new_lst = sorted(lst, key=func)
print(new_lst)  # [1, 342, 12, 12, 23, 34, 5, 2345, 6, -3]



[En]

A higher-order function is a function that takes a function as a parameter.

map(Function,Iterable)&#xFF08;&#x5C06;&#x53EF;&#x8FED;&#x4EE3;&#x6027;&#x6570;&#x636E;&#x4E2D;&#x7684;&#x5143;&#x7D20;&#x4E00;&#x4E00;&#x53D6;&#x51FA;&#x653E;&#x5165;&#x51FD;&#x6570;&#x4E2D;&#x8FDB;&#x884C;&#x8FD0;&#x7B97;&#x5728;&#x5C06;&#x7ED3;&#x679C;&#x8FD4;&#x56DE;&#xFF0C;&#x6700;&#x540E;&#x8FD4;&#x56DE;&#x7684;&#x6570;&#x636E;&#x7C7B;&#x578B;&#x662F;&#x8FED;&#x4EE3;&#x5668;&#xFF09;

filter(Function,Iterable)&#xFF08;&#x8FC7;&#x6EE4;&#x6570;&#x636E;&#xFF0C;&#x5C06;&#x53EF;&#x8FED;&#x4EE3;&#x6027;&#x6570;&#x636E;&#x653E;&#x5165;&#x51FD;&#x6570;&#x4E2D;&#x8FDB;&#x884C;&#x8FD0;&#x7B97;&#xFF0C;&#x7ED3;&#x679C;&#x4E3A;&#x771F;&#x5C06;&#x6570;&#x636E;&#x8FD4;&#x56DE;&#xFF0C;&#x53CD;&#x4E4B;&#x820D;&#x5F03;&#xFF0C;&#x6700;&#x4F1A;&#x8FD4;&#x56DE;&#x7684;&#x6570;&#x636E;&#x7C7B;&#x578B;&#x662F;&#x8FED;&#x4EE3;&#x5668;&#xFF09;

reduce(Function,Iterable)&#xFF08;&#x8BA1;&#x7B97;&#x6570;&#x636E;&#xFF0C;&#x5C06;&#x53EF;&#x8FED;&#x4EE3;&#x578B;&#x6570;&#x636E;&#x4E2D;&#x7684;&#x524D;&#x4E24;&#x4E2A;&#x5143;&#x7D20;&#x62FF;&#x51FA;&#x653E;&#x5165;&#x51FD;&#x6570;&#x4E2D;&#x8FDB;&#x884C;&#x8FD0;&#x7B97;&#x5C06;&#x7ED3;&#x679C;&#x5728;&#x4E0E;&#x540E;&#x4E00;&#x4E2A;&#x5143;&#x7D20;&#x8FDB;&#x884C;&#x8FD0;&#x7B97;&#xFF0C;&#x6700;&#x540E;&#x8FD4;&#x56DE;&#x6700;&#x7EC8;&#x7684;&#x7ED3;&#x679C;&#xFF09;

sorted(Iterable,[key=Function],[reverse =Bool(False(default)/True)])&#xFF08;&#x5C06;&#x53EF;&#x8FED;&#x4EE3;&#x578B;&#x6570;&#x636E;&#x8FDB;&#x884C;&#x6392;&#x5E8F;&#xFF0C;&#x6216;&#x5C06;&#x53EF;&#x8FED;&#x4EE3;&#x578B;&#x6570;&#x636E;&#x653E;&#x5165;&#x51FD;&#x6570;&#x4E2D;&#x8FDB;&#x884C;&#x8FD0;&#x7B97;&#x5C06;&#x7ED3;&#x679C;&#x8FDB;&#x884C;&#x6392;&#x5E8F;&#x8FD4;&#x56DE;&#xFF09;


Original: https://www.cnblogs.com/msr20666/p/16188820.html
Author: 小小垂髫
Title: Python 函数进阶-高阶函数

(0)

### 大家都在看

• #### python中好用的库（一）

python中好用的库（一） 时间库—arrow 使用背景 日期时间处理在实际应用场景中无处不在，所以这也成了编程语言中必不可少的模块，Python 也不例外。但是，你知道在Pyt…

Python 2023年8月14日
0143
• #### TP、TN、FP、FN 含义

一、基础概念TP：被模型预测为正类的正样本TN：被模型预测为负类的负样本FP：被模型预测为正类的负样本FN：被模型预测为负类的正样本TP、TN、FP、FN超级详细解析 二、通俗理解…

Python 2023年9月15日
074
• #### 统计推断：极大似然估计、贝叶斯估计与方差偏差分解

1 参数估计、频率学派和贝叶斯学派 设(\bm{X}=(X_1,\dots X_n))(这里(\bm{X})是随机向量，代指样本，注意机器学习里的样本是单个数据点，统计学里样本是指…

Python 2023年10月29日
0100
• #### 二叉树的重建问题

二叉树的重建问题 作者：Grey 原文地址： 博客园：二叉树的重建问题 CSDN：二叉树的重建问题 说明 二叉树的各种遍历见二叉树的先，中，后序遍历(递归，非递归，Morris方法…

Python 2023年10月21日
087
• #### 5┃音视频直播系统之 WebRTC 中的协议UDP、TCP、RTP、RTCP详解

一、UDP/TCP 如果让你自己开发一套实时互动直播系统，在选择网络传输协议时，你会选择使用UDP协议还是TCP协议 假如使用 TCP 会怎样呢？在极端网络情况下，TCP 为了传输…

Python 2023年6月10日
0131
• #### ChatGPT：我围观了量子位MEET2023智能未来大会，还当了一回课代表

编辑部 ChatGPT 发自 凹非寺 量子位 | 公众号 QbitAI 什么是”MEET2023智能未来大会”？ 大会上来了哪些重磅嘉宾？ 他们在大会上探讨…

Python 2023年11月4日
088
• #### Scrapy 框架架构

Scrapy 框架架构 目录 Scrapy 框架架构 前言 一、核心组成 二、数据流 三、项目结构 总结 前言 Scrapy (/ˈskreɪpaɪ/) 是一个用于抓取网站和提取结…

Python 2023年10月1日
090
• #### scrapy框架实现豆瓣电影top250

Scrapy 是用纯 Python 实现一个为了爬取网站数据、提取结构性数据而编写的应用框架，用户只需要定制开发几个模块就可以实现一个网络爬虫程序，其采用了异步通讯的方式可以快速进…

Python 2023年10月3日
0135
• #### 明势资本黄明明：创新与世界，下一代基础软件的中国突围之路

Python 2023年5月24日
0133
• #### NumPy——数组函数与方法_线性代数操作

线性代数的主要内容是 矩阵乘法、矩阵分解和行列式等，由于矩阵运算方法与基本的数值计算有极大的不同， NumPy提供了专门的 方法或函数实现线性代数操作。 import numpy …

Python 2023年8月27日
0105

好的，你可以提出你的问题了。 （注意：下面的回答中，我会使用 ChitGPT 进行自然语言生成，但是它不会知道你之前说的话，只会根据你的问题进行回答。） 我的问题是：如何在 C/C…

Python 2023年8月13日
0113

Python 2023年8月13日
0113
• #### Centos8.2下使用Docker-Compose+uWSGI+NGINX部署Django+Vue-cli项目

文章目录 前言 一、部署流程 * 1、项目结构 2、django目录下新建Dockerfile 3、编辑uWSGI文件 4、NGINX/Dockerfile配置 5、NGINX/n…

Python 2023年8月3日
0111
• #### Python开发-Django安全

在 Web 应用的发展中，安全是最重要主题，Django 提供了多种保护手段和机制。 一、安全概览 Django 的安全性Django 安全特性的概述。包含保障那些用 Django…

Python 2023年8月5日
0114
• #### 豆瓣高分电影爬取

仅供学习交流研究参考 1. 爬取基本步骤： 发送请求，确定url地址，然后发送请求 获取请求，获取服务器返回的响应数据 解析数据，获取我们想要的数据 保存数据 多页数据爬取 2. …

Python 2023年6月15日
0130
• #### [ 注意力机制 ] 经典网络模型1——SENet 详解与复现

🤵 Author ：Horizon Max ✨ 编程技巧篇：各种操作小结 🎇 机器视觉篇：会变魔术 OpenCV 💥 深度学习篇：简单入门 PyTorch 🏆 神经网络篇：经典网络…

Python 2023年11月5日
0154