当前位置: 首页 > news >正文

淘宝优惠网站建设/百度托管公司

淘宝优惠网站建设,百度托管公司,北京朝阳区居家办公,南宁公司网站模板建站前面我们已经总结并实践了用python获取到了数据。也介绍了python中http网络请求的几种方式,正在学习python开发语言或者对python3知识点生疏需要回顾的请点这里 ,本章主要总结了函数式编程及特点 和 python中内置的高阶函数及周边知识,方便自…

前面我们已经总结并实践了用python获取到了数据。也介绍了python中http网络请求的几种方式,正在学习python开发语言或者对python3知识点生疏需要回顾的请点这里 ,本章主要总结了函数式编程及特点 和 python中内置的高阶函数及周边知识,方便自己查看也欢迎大家参考,谢谢。

目录

一、了解函数式编程

二、python内置的高阶函数及周边

1.把函数当作参数

2.Python的内置函数map()

3.Python的内置函数reduce()

4.python的内置函数filter() 

5.Python排序函数 sorted()

6.Python返回函数

7.Python的闭包 

8.Python的匿名函数

9.Python编写无参数的decorator 

10.Python编写有参数的decorator

11.Python的偏函数

三、总结

 【python 入门篇 1 2 3 】


一、了解函数式编程

函数式编程的特点:

  1. 不是纯函数式编程:允许有变量
  2. 支持高阶函数:函数可以作为变量
  3. 支持闭包:可以返回函数
  4. 支持匿名函数

二、python内置的高阶函数及周边

1.把函数当作参数

顾名思义就是把一个函数当作参数使用。例如:

# abs函数把传递的数据乘以10 后返回 
def abs(x):return x*10# 这里参数 f参数就是需要传递一个函数
def add(x, y, f):return f(x) + f(y)# 这里在调用add方法的时候 把上面abs函数作为参数传入
result =  add(-5, 9, abs) # 相当于 result = abs(-5) + abs(9) 
print(result)  # 40
2.Python的内置函数map()

map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list。并通过函数 f处理list中的每个元素,map()函数会返回一个迭代器,可以依次迭代得到原来list的元素被函数f处理后的结果。

例如,对于list [9, 8, 7, 6, 5, 4, 3, 2, 1]。
如果希望把list的每个元素都作平方,就可以利用map()函数。

 

3.Python的内置函数reduce()

reduce()函数接收的参数和 map() 类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。

在python3中,reduce()函数被收录到functools包内,需要引入functools才可以使用。

# 从functools包中引入reduce模块
from functools import reduce
# 定义一个list数组
list = [5, 4, 3, 2, 1]
# 定义当做reduce函数的参数的函数
def f(x,y):return x*y# 执行reduce高阶函数后打印数据
print(reduce(f, list))

其实这个计算结果是120. 其实就是list元素的乘积 5*4*3*2*1 = 120.

f(5,4)  f(20,3) f(60,2) f(120,1) 就是f()函数第一次执行的结果当做下一次函数的x参数使用,返回最终结果。

reduce()还可以接收第3个可选参数,作为计算的初始值。如果把初始值设为2

# 执行reduce高阶函数后打印数据
print(reduce(f, list, 200))   #24000

 

4.python的内置函数filter() 

filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,并返回一个迭代器,可以迭代出所有符合条件的元素。

 例如现在要找出10以内的奇数。

利用filter函数还可以处理空的字符串和无效数据:

 

# 定义要处理的数据
list = ['STR', None, '', 'rose', '  ', 'fly']
# 判断元素是否为空 为空则返回false 执行filter函数会过滤掉
def is_not_empty(s):return s and len(s.strip()) > 0# 过滤掉为空的数据并打印数据
for item in filter(is_not_empty, list):print(item)

注意: s.strip()会默认删除空白字符(包括'\n', '\r', '\t', ' ')

  

5.Python排序函数 sorted()

Python内置的 sorted()函数可对list进行排序:

  1. 默认是由小到大排序列表的元素。
  2. 当list的每一个元素又是一个容器时,则会以第一个元素来排序 sorted()函数则按名字首字母进行了排序并返回。

如果需要按照成绩高低进行排序,需要指定排序的字段是成绩,sorted接受key参数,用来指定排序的字段,key的值是一个函数,接受待排序列表的元素作为参数,并返回对应需要排序的字段。因此,sorted()函数也是高阶函数。可接收三个参数:

print(sorted(food))      # 经过sorted函数默认排序后打印   

print(sorted(food, key=k))     #传入指定按成绩排序的参数 key

print(sorted(food, key=k,reverse=True))   #reverse 设置倒序排序

6.Python返回函数

在函数内部,是可以定义子函数的。作为高阶函数,可以接受函数作为参数,其实高阶函数,除了不仅仅可以返回int、str、list、dict等数据类型,还可以返回函数。因此,可以把函数的子函数返回。

要注意的是,返回函数和返回函数值的语句是非常类似的,返回函数时,不能带小括号,而返回函数值时,则需要带上小括号以调用函数。 

# 返回函数
def myabs():return abs# 返回函数值
def myabs(x):return abs(x)

 返回函数有很多应用,比如可以将一些计算延迟执行:

#直接计算返回list元素求和数据
# 定义函数 返回内置函数 sum()
def calc_sum(list_):return sum(list_)#调用函数得到list数组元素之和赋值给result
result = calc_sum([1, 2, 3, 4])
print(result)  #10

如果返回一个函数,我们必须重新调用返回的函数才会执行内置函数sum,代码应该更清晰。

 这样我们拿到的函数可以根据当前需求决定要不要执行,代码更灵活。

7.Python的闭包 

内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包(Closure)。前面我们用到的例子:calc_sum(list)函数

我们没法把 lazy_sum 移到 calc_sum 的外部,因为它引用了 calc_sum 的参数 list_,像这样内层函数引用外层函数的变量(参数),然后把内层函数返回,就称为闭包。

def calc_sum(list_):def lazy_sum():return sum(list_)return lazy_sum

闭包的特点是返回的函数还引用了外层函数的局部变量,所以,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变。因此,返回函数不要引用任何循环变量,或者后续会发生变化的变量。

8.Python的匿名函数

高阶函数可以接收函数做参数,有些时候,我们不需要显式地定义函数,直接传入匿名函数更方便。

匿名函数使用lambda定义:lambda x: x * x,就可以完成原来显式定义的f(x)函数的功能,冒号前面的x表示匿名函数的参数,后面的是一个表达式,匿名函数有个限制,就是只能有一个表达式,不写return,返回值就是该表达式的结果。

list数组经map函数处理后返回的数据。 

9.Python编写无参数的decorator 

Python的 decorator 本质上就是一个高阶函数,它接收一个函数作为参数,然后,返回一个新函数。

使用 decorator 用Python提供的 @ 语法,这样可以避免手动编写 f = decorate(f) 这样的代码。

编写@log:

def log(f):def fn(x):print('call ' + f.__name__ + '()...')return f(x)return fn#用于阶乘函数
@log
def factorial(n):return reduce(lambda x,y: x*y, range(1, n+1))print(factorial(10))

多个参数时:对于参数大于等于两个的就会报错, @log 写死了只含一个参数的返回函数。要让 @log 自适应任何参数定义的函数,可以利用Python的 args 和 *kwargs,保证任意个数的参数总是能正常调用:

def log(f):def fn(*args, **kwargs):print('call ' + f.__name__ + '()...')return f(*args, **kwargs)return fn
10.Python编写有参数的decorator

前面  编写 log函数时 默认打印信息print('call ' + f.__name__ + '()...')语句是固定不变的,只有函数名称可以动态打印,如果我们根据函数的重要做了区分想显示出来怎么办呢?这时,log函数本身就需要传入'INFO'或'DEBUG'这样的参数。

@log('DEBUG')
def my_func():pass#上面的定义翻译成高阶函数的调用
my_func = log('DEBUG')(my_func)# 又相当于
log_decorator = log('DEBUG')
@log_decorator
def my_func():pass

所以,带参数的log函数首先返回一个decorator函数,再让这个decorator函数接收my_func并返回新函数,相当于是在原有的二层嵌套里面,增加了一层嵌套:

def log(prefix):def log_decorator(f):def wrapper(*args, **kw):print('[{}] {}()...'.format(prefix, f.__name__))return f(*args, **kw)return wrapperreturn log_decorator@log('DEBUG')
def test():pass
test()
11.Python的偏函数

当一个函数有很多参数时,调用者就需要提供多个参数。如果减少参数个数,就可以简化调用者的负担。

偏函数指的就是“创建一个调用另外一个部分参数或变量已经预置的函数”的函数的用法,functools.partial就是帮助我们创建一个偏函数的,不需要我们自己定义。

 int()函数将字符串转换成整数,下面代码int默认是按照十进制去转换的.即默认参数为10,如果传入base参数,就可以做 N 进制的转换:

# int()函数将字符串转换成整数
age1 = int('20',base=10)  
age2 = int('20')print(age1,age2)  #20 20# 按照二进制转换
age3 = int('10',base=2)
print(age3)  # 2

 我们可以定义一个int2()的函数,默认把base=2传进去:int2实际上就变成了部分参数(base)已经预置了的偏函数。

def int2(x, base=2):return int(x, base)
print(int2('10'))   # 2

functools.partial就是帮助我们创建一个偏函数的,不需要我们自己定义int2(),可以直接使用下面的代码创建一个新的函数int2:

所以,functools.partial可以把一个参数多的函数变成一个参数少的新函数,少的参数需要在创建时指定默认值,这样,新函数调用的难度就降低了。

三、总结

本文主要介绍了函数式编程及特点 和 python中内置的高阶函数及周边: 

1.函数式编程的主要特点:允许有变量函数可以作为变量可以返回函数支持匿名函数

2.python中的内置函数:map()reduce()filter()sorted()闭包匿名函数偏函数等内容。

有问题欢迎大家评论区留言探讨,谢谢。

 另附:python中http请求及网络爬虫获取数据:

1.Python 爬数据案例 客户端服务端http请求 推荐 【进阶篇 2 】-CSDN博客

2.python面向对象继承多态和一些特殊方法的使用

 【python 入门篇 1 2 3 】

1.安装下载基本数据类型:Python 3 入门基础知识【1】数据类型 安装下载 推荐-CSDN博客

2.list数组定义及操作:Python 3 入门基础知识 之数据容器及用法【2】 推荐-CSDN博客

3.函数及参数:Python 3 入门基础知识【3】递归函数以及参数部分-CSDN博客

相关文章:

Python 函数式编程 内置高阶函数及周边【进阶篇 3】推荐

前面我们已经总结并实践了用python获取到了数据。也介绍了python中http网络请求的几种方式,正在学习python开发语言或者对python3知识点生疏需要回顾的请点这里 ,本章主要总结了函数式编程及特点 和 python中内置的高阶函数及周边知识,方便自…...

【Rust光年纪】探秘Rust GUI库:从安装配置到API概览

Rust语言GUI库全方位比较:选择适合你的工具 前言 在现代软件开发中,图形用户界面(GUI)库扮演着至关重要的角色。随着Rust语言的不断发展,越来越多的优秀的GUI库也相继问世,为Rust开发者提供了更多选择。本…...

Element plus部分组件样式覆盖记录

文章目录 一、el-button 样式二、Popconfirm 气泡确认框三、Popover 气泡卡片四、Checkbox 多选框五、Pagination 分页六、Form 表单七、Table 表格 一、el-button 样式 html&#xff1a; <el-button class"com_btn_style">button</el-button>样式覆盖…...

重塑业务生态,Vatee万腾平台:引领行业变革的新引擎

在数字经济浪潮汹涌的今天&#xff0c;传统行业的边界正被不断模糊与重塑&#xff0c;新兴技术如云计算、大数据、人工智能等正以前所未有的速度改变着商业世界的面貌。在这一背景下&#xff0c;Vatee万腾平台应运而生&#xff0c;以其独特的创新模式和强大的技术实力&#xff…...

标准术语和定义中的【架构】应该如何描述

一、参考国家标准和国际标准中对“架构”的描述 &#xff08;1&#xff09;GB/T 8566-2022 国家标准 架构的术语描述&#xff1a;(系统)在其环境中的一些基本概念或性质,体现在其元素关系,以及设计与演进原则中。 &#xff08;2&#xff09;ISO/IEC/IEEE 42010 国际标准 架构的…...

华为鸿蒙Core Vision Kit 骨骼检测技术

鸿蒙Core Vision Kit 是华为鸿蒙系统中的一个图像处理框架&#xff0c;旨在提供各种计算机视觉功能&#xff0c;包括物体检测、人脸识别、文本识别等。骨骼检测是其中的一项功能&#xff0c;主要用于检测和识别人类身体的骨骼结构。 骨骼检测的关键点 骨骼点检测&#xff1a;通…...

Table API SQL系统(内置)函数System (Built-in) Function详解

目录 函数类型 引用函数 函数精确引用 函数模糊引用 函数解析顺序 精确的函数引用 模糊的函数引用 系统函数 标量函数(Scalar Functions) 比较函数(Comparison Functions) 逻辑函数(Logical Functions) 算术函数(Arithmetic Functions) 字符串函数(Strin…...

一键运行RocketMQ5.3和Dashboard

一键运行RocketMQ5.3和Dashboard 目录 一键运行RocketMQ5.3和Dashboard通过Docker Compose 来一键启动运行的容器包括docker-compose.yml文件运行命令启动本地效果查看 参考信息 通过Docker Compose 来一键启动 运行的容器包括 NameServerBrokerProxyDashBoard docker-compo…...

HAL STM32 SG90舵机驱动控制

HAL STM32 SG90舵机驱动控制 &#x1f516;测试对象&#xff1a;STM32F103SG90舵机 &#x1f33c;功能实现&#xff1a;通过串口指令&#xff0c;控制SG90舵机转动到指定角度。 ✨在实际硬件舵机驱动过程中&#xff0c;使用SG90普通舵机空载运转情况下&#xff0c;电流在180mA…...

【Kubernetes】k8s集群图形化管理工具之rancher

目录 一.Rancher概述 1.Rancher简介 2.Rancher与k8s的关系及区别 3.Rancher具有的优势 二.Rancher的安装部署 1.实验准备 2.安装 rancher 3.rancher的浏览器使用 一.Rancher概述 1.Rancher简介 Rancher 是一个开源的企业级多集群 Kubernetes 管理平台&#xff0c;实…...

AI编程系列一1小时完成链家房价爬虫程序

背景 AI编程实在太火&#xff0c;写了很多年的Java&#xff0c;现在Python 和Go 简单好用&#xff0c;今天结合智谱清言快速完成一个程序爬虫程序&#xff0c;没有任何Python 编程经验&#xff0c;只需要会提问&#xff0c;熟悉简单HTML结构即可。未来一定是有业务能力者的福…...

【JavaEE初阶】文件内容的读写—数据流

目录 &#x1f4d5; 引言 &#x1f334; 数据流的概念 &#x1f6a9; 数据流分类 &#x1f333; 字节流的读写 &#x1f6a9; InputStream&#xff08;从文件中读取字节内容) &#x1f6a9; OutputStream&#xff08;向文件中写内容&#xff09; &#x1f384; 字符流的…...

Spring Boot项目中使用Sharding-JDBC实现读写分离

Sharding-JDBC是一个分布式数据库中间件&#xff0c;它不仅支持数据分片&#xff0c;还可以轻松实现数据库的读写分离。下面是如何在Spring Boot项目中集成Sharding-JDBC并实现读写分离的详细步骤&#xff1a; 目录 1. 引入依赖 2. 配置数据源 3. 配置Sharding-JDBC相关参数…...

【网络安全】SSO登录过程实现账户接管

未经许可,不得转载。 文章目录 正文正文 登录页面展示了“使用 SSO 登录”功能: 经分析,单点登录(SSO)系统的身份验证过程如下: 1、启动SSO流程:当用户点击按钮时,浏览器会发送一个GET请求到指定的URL: /idp/auth/mid-oidc?req=[UNIQUE_ID]&redirect_uri=[REDI…...

Admin.NET源码学习(3:LazyCaptcha使用浅析)

Admin.NET项目前端登录页面的验证码图片默认使用动态图&#xff0c;且图形内容为阿拉伯数字运算&#xff08;如下图所示&#xff09;&#xff0c;用户输入正确的计算结果才能正常登录。项目采用LazyCaptcha模块生成验证码及动态图。   在Admin.NET.Core项目中添加了Lazy.Cap…...

在原生未启用kdump的BCLinux 8系列服务器上启用kdump及报错处理

本文记录了在原生未启用kdump的BCLinux 8系列操作系统的服务器上手动启用kdump服务及报错处理的过程。 一、问题描述 BCLinux 8系列操作系统&#xff0c;系统初始化安装时未启用kdump服务&#xff0c;手动启动时报以下“No memory reserved for crash kernel”或“ConditionK…...

Android架构组件中的MVVM

Android架构组件中的MVVM&#xff08;Model-View-ViewModel&#xff09;模式是一种广泛应用的设计模式&#xff0c;它通过将应用程序分为三个主要部分&#xff08;Model、View、ViewModel&#xff09;来分离用户界面和业务逻辑&#xff0c;从而提高代码的可维护性、可扩展性和可…...

走向绿色:能源新选择,未来更美好

当前&#xff0c;全球范围内可再生能源正经历着从辅助能源向核心能源的深刻转型&#xff0c;绿色能源日益渗透至居住、出行、日常应用等多个领域&#xff0c;深刻影响着我们的生活方式&#xff0c;使我们能够更加充分地体验清洁能源所带来的优质生活。 一、绿色能源与“住” …...

鸿蒙装饰器的介绍

State装饰器&#xff0c; State装饰的变量&#xff0c;称为状态变量&#xff0c;与声明式范式中的其他被装饰变量一样&#xff0c;是私有的&#xff0c;只能从组件内部访问&#xff0c;在声明时&#xff0c;必须指定其类型和本地初始化。 Provide装饰器和Consume装饰器&#…...

零基础5分钟上手亚马逊云科技核心云架构知识 - 权限管理最佳实践

简介&#xff1a; 欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列&#xff0c;适用于任何无云计算或者亚马逊云科技技术背景的开发者&#xff0c;通过这篇文章大家零基础5分钟就能完全学会亚马逊云科技一个经典的服务开发架构方案。 我会每天介绍一个基于亚马逊云科技…...

[数据库][知识]SQL Server、MySQL 和 Oracle 的默认端口和数据库链接

SQL Server、MySQL 和 Oracle 的默认端口号、连接 URL 和驱动类名。以下是对每个数据库连接信息的简要说明&#xff1a; SQL Server 默认端口号&#xff1a;1433JDBC URL 格式&#xff1a;jdbc:sqlserver://localhost:1433;DatabaseNamedbnameJDBC 驱动类名&#xff1a;com.mic…...

【Unity教程】使用 Animation Rigging实现IK制作程序化的动画

在 Unity 开发中&#xff0c;为角色创建逼真且自适应的动画是提升游戏体验的关键。在本教程中&#xff0c;我们将结合 Animation Rigging 工具和 IK&#xff08;Inverse Kinematics&#xff0c;反向运动学&#xff09;插件来实现程序化的动画。 视频教程可以参考b战大佬的视频 …...

OBS混音器(Mixers)的重要性和配置指南

在进行直播或录制时,音频管理是非常关键的一环,特别是在需要同时处理多个音频源的复杂设置中。OBS Studio提供了强大的音频管理工具,其中“混音器”功能扮演了核心角色。混音器(Mixers)在OBS中用于控制不同音频源的输出路由,允许用户精确控制哪些音源出现在最终的直播或录…...

Ubuntu安装Anaconda3

本文详细阐述了在 Ubuntu 系统中安装 Anaconda3 的完整流程。包括 Anaconda3 安装包的获取途径&#xff0c;具体安装过程中的每一个步骤及注意事项&#xff0c;还有安装后的环境变量设置和安装成功的验证方法。旨在为 Ubuntu 用户提供清晰、易懂且准确的 Anaconda3 安装指南&am…...

数据类型解码:INT、VARCHAR、DATETIME的深度解析与实践

标题&#xff1a;数据类型解码&#xff1a;INT、VARCHAR、DATETIME的深度解析与实践 在软件开发和数据库设计中&#xff0c;数据类型是构建数据模型的基础。准确理解和使用数据类型&#xff0c;如INT、VARCHAR、DATETIME&#xff0c;对于确保数据的完整性、性能和安全性至关重…...

基于单片机的智能晾衣系统设计

摘 要 &#xff1a;在网络信息技术的推动下&#xff0c;智能家居得到了广泛应用&#xff0c;文章根据当前的市场动态&#xff0c;针对基于单片机的智能晾衣系统设计展开论述&#xff0c;具体包括两个方面的内容———硬件设计和软件设计。 关键词 &#xff1a;单片机&#xff…...

Python实战项目:天气数据爬取+数据可视化(完整代码)

一、选题的背景 随着人们对天气的关注逐渐增加&#xff0c;天气预报数据的获取与可视化成为了当今的热门话题&#xff0c;天气预报我们每天都会关注&#xff0c;天气情况会影响到我们日常的增减衣物、出行安排等。每天的气温、相对湿度、降水量以及风向风速是关注的焦点。通过…...

知识改变命运 数据结构【链表面试题】

1. 删除链表中等于给定值 val 的所有节点。 OJ链接 public ListNode removeElements(ListNode head, int val) {if (headnull) {return null;}ListNode curhead.next;ListNode prehead;while(cur!null) {if(cur.valval) {pre.nextcur.next;curcur.next;}else {precur;curcur.ne…...

计算机毕业设计 医院问诊系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…...

掌握CSS的:any-link伪类:统一链接样式的高效方法

在网页设计中&#xff0c;链接是用户导航和交互的重要组成部分。CSS提供了多种伪类选择器来定义链接的不同状态&#xff0c;例如:link用于选择未访问的链接&#xff0c;:visited用于选择已访问的链接。然而&#xff0c;有时候我们需要同时为所有状态的链接设置统一的样式&#…...