Python必学函数:常用内置函数详解和举例分析

map函数

是根据第一个参数定义的函数,依次作用在序列上,返回一个迭代器

s = '1,2,3,4,5'
# 将字符串转换成整数列表
list(map(int, s.split(','))) # [1,2,3,4,5]# 求两个连表中元素的和,放入新列表中
data1 = [1,2,3]
data2 = [4,5,6]
list(map(lambda x,y:x+y, data1, data2)) # [5, 7, 9]

filter函数

是根据第一个参数定义的函数来过滤序列,过滤掉不符合条件的元素,并返回一个迭代器

data = [-1, -2, 0, 1, 0, 2, 3, 4, 5]
def filter_0(x):return False if x == 0 else True# 过滤序列中的0
list(filter(filter_0, data)) # [-1, -2, 1, 2, 3, 4, 5]
list(filter(lambda x:x!=0, data))# 如果第一个参数是None,则过滤掉序列中bool值为False的项
data = [0,1,2,3]
list(filter(None, data)) # [1,2,3]

reduce函数

将两个参数的函数作用在一个序列上,把结果继续和序列的下一个元素作为函数的参数,继续进行累积,使用时需要导入 from functools import reduce

from functools import reducedata = [1,2,3,4,5]
def _add(a,b):return a+bresult = reduce(_add, data) # 15
result = reduce(lambda x,y:x+y, data)

sorted函数

用于对可迭代对象进行排序的函数。它不会改变原始可迭代对象的顺序,而是返回一个新的已排序的列表

# 根据其中一个属性排序,reverse 表示降序
student = [('li', 12, 3), ('long', 33, 4), ('fei', 20, 1), ('zhang', 20,3), ('mengd', 20, 0)]
res = sorted(student, key=lambda x: x[1], reverse=True)
print(res)# 先根据 第2个属性正序排序,再按第三个属性逆序排序
res = sorted(student, key=lambda x: (x[1], -x[2]))# 字典排序,先根据name, 再根据age
student = [{'name':'li', 'age':20}, {'name':'fe', 'age':18}, {'name':'lo', 'age':15}, {'name':'me', 'age':22}]
sorted(student, key=lambda x: (x['name'], x['age']))# 列表中的字典,按已知顺序排序
student = [{'name':'zhang'}, {'name':'wang'},{'name':'li'},{'name':'zhao'},{'name':'chen'}]
index = ['li', 'zhang', 'wang', 'zhao']
sorted(student, key=lambda x: index.index(x['name']))

memoryview函数

允许 Python 代码访问一个对象的内部数据,只要该对象支持 缓冲区协议 而无需进行拷贝,该对象必须支持缓冲区协议,比如内置对象 bytes 和 bytearray。比如当访问 bytes 和 bytearray对象,进行切片的时候,需要进行浅拷贝的操作,如果数据非常大的时候,浅拷贝也是非常消耗内存资源的,如果使用memoryview函数访问 bytes 和 bytearray 不会进行拷贝,是直接访问原始数据,但是修改的时候也会修改原始数据。

import time# 使用正常切片进行访问时耗时 34秒
data = b'x' * 1024 * 1024
start = time.time()
data_copy = data
while data_copy:data_copy = data_copy[1:]
print(f'{time.time() - start:0.3f}')# 使用内存视图进行访问耗时只有0.2秒
data = b'x' * 1024 * 1024
start = time.time()
data_memv = memoryview(data)
while data_memv:data_memv = data_memv[1:]
print(f'memoryview {time.time() - start:0.3f}')

内置模块中使用memoryview

# ssl.pyclass SSLSocket:def sendall(self, data, flags=0):self._checkClosed()if self._sslobj is not None:if flags != 0:raise ValueError("non-zero flags not allowed in calls to sendall() on %s" %self.__class__)count = 0with memoryview(data) as view, view.cast("B") as byte_view:amount = len(byte_view)while count < amount:v = self.send(byte_view[count:])count += velse:return super().sendall(data, flags)

all(iterable)

如果 iterable 的所有元素为真(或迭代器为空),返回 True

all([1,2,3]) # Trueall([0, 1, 2]) # False

any(iterable)

如果 iterable 的任一元素为真则返回 True。 如果迭代器为空,返回 False

any([False, 0]) # False
any([0, 0, 0]) # Falseany([1,2,3]) # True
any([0, 1, 2]) # True

bin(x)

将一个整数转变为一个前缀为“0b”的二进制字符串。

bin(10) # '0b1010'
bin(1000)  # '0b1111101000'

bytes([source[, encoding[, errors]]])

返回一个新的“bytes”对象, 是一个不可变序列,包含范围为 0 <= x < 256 的整数。

bytes('123123'.encode()) # b'123123'

chr(i)

返回 Unicode 码位为整数 i 的字符的字符串格式。

chr(65) # 'A'
chr(98) # 'b'

ord©

对表示单个 Unicode 字符的字符串,返回代表它 Unicode 码点的整数。

ord('A') # 65
ord('b') # 98

hex(x)

将整数转换为以“0x”为前缀的小写十六进制字符串。

hex(1) # '0x1'
hex(10) # '0xa'
hex(15) # '0xf'
hex(16) # '0x10'

enumerate(iterable, start=0)

返回一个枚举对象。iterable 必须是一个序列,或 iterator,或其他支持迭代的对象。

data = [1, 3, 4, 5, 6]for index, row in enumerate(data):print(index, row)
0 1
1 3
2 4
3 5
4 6# index索引从2开始
for index, row in enumerate(data, 2):print(index, row)2 1
3 3
4 4
5 5
6 6

eval(expression[, globals[, locals]])

返回值为表达式_expression_求值的结果

a = 1
b = 2
eval('a+b') # 3

exec(object[, globals[, locals]])

这个函数支持动态执行 Python 代码。object 必须是字符串或者代码对象。如果是字符串,那么该字符串将被解析为一系列 Python 语句并执行(除非发生语法错误)。如果是代码对象,它将被直接执行。

funcstr = """
def add(a, b):return a+b
"""
exec(funcstr) # 将字符串定义的函数,解析为代码并加载到内存中
res = eval("add(1,3)") # 调用函数
print(res) # 4action = "x*x"
func1 = f"""mul = lambda x:{action}"""
exec(func1)
res = eval("mul(3)")
print(res) # 9

iter(object[, sentinel])

接受一个可迭代的对象作为参数,然后返回该可迭代对象的迭代器。

iter([1,2,3]) # <list_iterator at 0x5af7e08>
iter((1,2,3)) # <tuple_iterator at 0x5af7288>for i in iter([1,2,3]):print(i)
1
2
3

next(iterator[, default])

接受一个迭代器作为参数,用于从可迭代对象或迭代器中获取下一个元素,如果没有更多的元素可供迭代,next() 函数会引发 StopIteration 异常,或者可以指定一个默认值作为参数,以在迭代结束时返回。

data = iter([1,2,3])next(data)
1next(data)
2next(data)
3next(data)
StopIteration

zip(*iterables)

返回一个元组的迭代器,其中的第 i 个元组包含来自每个参数序列或可迭代对象的第 i 个元素。 当所输入可迭代对象中最短的一个被耗尽时,迭代器将停止迭代。

d1 = [1, 2, 3]
d2 = ['alic', 'bob', 'liuh']for no, name in zip(d1, d2):print(no, name)1 alic
2 bob
3 liuhd1 = [1, 2, 3]
d2 = ['alic', 'bob', 'liuh', 'zhange']# 取最短的
for no, name in zip(d1, d2):print(no, name)1 alic
2 bob
3 liuhd1 = [1, 2, 3]
d2 = ['alic', 'bob', 'liuh', 'zhange']
d3 = [172, 180, 176]# 多组同时遍历
for no, name, height in zip(d1, d2, d3):print(no, name, height)1 alic 172
2 bob 180
3 liuh 176

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/118891.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Fedora Linux 38下安装音频与视频的解码器和播放器

Fedora Linux 38 操作系统安装好后&#xff0c;默认是没有音频与视频的解码器的&#xff0c;音频与视频的播放体验非常差劲。但是第三方的软件源中有解码器和播放器的软件&#xff0c;需要我们自己手动安装。、 连接互联网&#xff0c;打开Shell命令行&#xff1a; 1. sudo d…

配置Sentinel 控制台

1.遇到的问题 服务网关 | RuoYi 最近调试若依的微服务版本需要用到Sentinel这个组件&#xff0c;若依内部继承了这个组件连上即用。 Sentinel是阿里巴巴开源的限流器熔断器&#xff0c;并且带有可视化操作界面。 在日常开发中&#xff0c;限流功能时常被使用&#xff0c;用…

uni-app配置微信开发者工具

一、配置微信开发者工具路径 工具->设置->运行配置->小程序运行配置->微信开发者工具路径 二、微信开发者工具开启服务端口

YB5302是一款工作于2.7V到6.5V的PFM升压型双节锂电池充电控制集成电路

YB5302 锂电输入升压型双节锂电池充电芯片 概述: YB5302是一款工作于2.7V到6.5V的PFM升压型双节锂电池充电控制集成电路。YB5302采用恒流和准恒压模式(Quasi-CVT™)对电池进行充电管理&#xff0c;内部集成有基准电压源&#xff0c;电感电流检测单元&#xff0c;电池电压检测电…

Remote Local File Inclusion (RFI/LFI)-文件包含漏洞

文件包含是一种功能,在各种开发语言中都提供了内置的文件包含函数。在PHP中,例如,可以使用include()和require()函数来引入另一个文件。这个被引入的文件可以当作PHP代码执行,而忽略其后缀本身。 // if( count( $_GET ) ) if( isset( $file ) )include( $file ); else {he…

易点易动固定资产管理系统:高效盘点海量固定资产的得力助手

固定资产是企业重要的财务资源之一&#xff0c;盘点是保证固定资产准确性和完整性的关键环节。然而&#xff0c;对于拥有海量固定资产的企业来说&#xff0c;传统的手工盘点方式效率低下且容易出错。为了解决这一难题&#xff0c;易点易动固定资产管理系统应运而生。本文将深入…

虹科 | 解决方案 | 非道路移动机械诊断方案

虹科Pico汽车示波器为卡车、拖拉机、叉车、船只、联合收割机、挖掘机开发了专用的测试附件和软件测试菜单&#xff0c;比如 24 V 电池、Bosch Denoxtronic、J1939 通信、发动机和液压传动系统以及部件测试等。我们为从事重型车辆和非道路移动机械的维护与诊断的朋友&#xff0c…

【开题报告】基于微信小程序的旅游攻略分享平台的设计与实现

1.研究背景及意义 旅游已经成为现代人生活中重要的组成部分&#xff0c;人们越来越热衷于探索新的目的地和体验不同的文化。然而&#xff0c;对于旅游者来说&#xff0c;获取准确、可靠的旅游攻略信息并不容易。传统的旅游攻略书籍或网站往往无法提供实时、个性化的建议。因此…

Java New对象分配内存流程

一、流程图 二、流程介绍 1、进行逃逸分析&#xff0c;判断是否能够分配到栈上&#xff1a; Y&#xff1a; 如果能分配到栈上&#xff0c;则进行分配。等方法出栈时&#xff0c;对象内存销毁&#xff0c;可有效减少GC的次数。 N&#xff1a;无法分配到栈上&#xff0c;则判断是…

VMware创建Linux虚拟机之(三)Hadoop安装与配置及搭建集群

Hello&#xff0c;world&#xff01; &#x1f412;本篇博客使用到的工具有&#xff1a;VMware16 &#xff0c;Xftp7 若不熟悉操作命令&#xff0c;推荐使用带GUI页面的CentOS7虚拟机 我将使用带GUI页面的虚拟机演示 虚拟机&#xff08;Virtual Machine&#xff09; 指通过…

对于多分类问题,使用深度学习(Keras)进行迁移学习提升性能

本文是仿照前面的文章,使用Keras迁移学习提升性能,原文是针对二分类问题,使用迁移学习的方式来提升准确率,本文用迁移学习的方式来提升多分类问题的准确率。 同时,在前面的文章中,使用普通的小型3层卷积网络+2层全连接层实现了多分类的85%左右的准确率, 此处将用迁移学…

Mybatisplus 常用注解

一、Mybatisplus 注解 TableName 表名注解&#xff0c;标识实体类对应的表 Documented Retention(RetentionPolicy.RUNTIME) Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE}) public interface TableName {// 表名String value() default "";// schema…

最适合用来编写程序、网站、AI的编程语言分别是什么?

编写程序最适合的语言&#xff1a; Python&#xff1a;Python 是一种解释性、面向对象、动态语言。它是一种易于学习的语言&#xff0c;适合编写小型到大型的应用程序。由于其简单易用的语法和广泛的支持库&#xff0c;Python 成为了数据科学和机器学习领域的首选语言。同时&a…

XTU-OJ 1227-Robot

题目描述 假设在一个XOY坐标的平面上&#xff0c;机器人一开始位于原点&#xff0c;面向Y轴正方向。 机器人可以执行向左转&#xff0c;向右转&#xff0c;向后转&#xff0c;前进四个指令。 指令为 LEFT:向左转RIGHT:向右转BACK:向后转FORWORD n:向前走n(1≤n≤100)个单位 现在…

【环境】Linux下Anaconda/ Miniconda安装+百度Paddle环境搭建+Cudnn(3090显卡+CUDA11.8+cudnn8.6.0)

清华源帮助链接&#xff1a;https://mirror.tuna.tsinghua.edu.cn/help/anaconda/ 下载链接&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ 其他深度学习环境相关博文&#xff1a;【stable-diffusion】4090显卡下dreambooth、lora、sd模型微调的GUI环境…

计算机网络-TCP协议

面向连接的运输&#xff1a;TCP TCP连接 TCP被称为面向连接的&#xff0c;因为在应用程序开始互传数据之前&#xff0c;TCP会先建立一个连接&#xff0c;该连接的建立涉及到三次“握手”。 TCP的连接不是一条真实存在的电路&#xff0c;而是一条逻辑链接&#xff0c;其共同状…

SpringBoot篇---第四篇

系列文章目录 文章目录 系列文章目录一、springboot常用的starter有哪些二、 SpringBoot 实现热部署有哪几种方式&#xff1f;三、如何理解 Spring Boot 配置加载顺序&#xff1f; 一、springboot常用的starter有哪些 spring-boot-starter-web 嵌入tomcat和web开发需要servlet…

shell编程(第14篇:管道符号的妙用)

前言 类Unix系统中&#xff0c;有非常多的命令&#xff0c;如果每个命令都只能独立运行&#xff0c;无法发挥他们的作用&#xff0c;前辈们利用管道&#xff0c;把命令组合在一起使用&#xff0c;管道也是进程间通信的方式之一 管道符 在shell编程中&#xff0c;管道符用竖线字…

遍历树形结构记录

例如: 这是递归对树形结构的遍历 findMatchingValue(json1,json2){ if(json1.defaultLabel&&json2.some(item>item.titlejson1.defaultLabel)){ //将匹配的值保存起来 this.matchedValue.push(json1.defaultLabel) } if(json1.childrens&&json1.childrens.…

8.3 矢量图层点要素单一符号使用二

文章目录 前言单一符号&#xff08;Single symbol&#xff09;渲染图片标记&#xff08;Raster Image marker&#xff09;QGis代码实现 动画标记&#xff08;Animated marker&#xff09;QGis代码实现 总结 前言 上一篇教程介绍了矢量图层点要素单一符号中简单标记和svg标记本…