python基础课程 第5章 奇妙的内建函数
off999 2024-10-25 13:47 48 浏览 0 评论
从我最早立志于成为程序员写第一行代码开始,经常在书本里和前辈嘴里了解了这么一句话 “不要重复你自己 (Don't Repeat Yourself )”,也就是所谓的DRY原则,并以此作为自己的程序员准则之一。
DRY原则的意思是指不要为一个相同的功能或者类似的功能重复编写两份代码。我觉得谈恋爱结婚也大概可以如此,大家如果能遵循 “不要重复你自己” 的原则,也就不会有那么高的离婚率,天下也就没有那么多单亲家庭了。
然而人生远远比计算机世界复杂,我们可以用python在计算机中实现这个原则,却很难在人生中实现它。有人说工程师相对比较单纯也是如此吧,工作久了,难免受机器的一些影响。
毕竟作为高级动物的我们内心世界太过复杂和敏感,到现在为止甚至未来的很长的时间里也没办法被人工智能所取代。如果有一天我们被人工智能制造出来的物体取代,那么我相信它一定也是一台内心丰富的电脑。
今天我们来讲讲 python 的常用内建函数,以便于大家在日常编程过程中遇到类似的场景可以直接拿来使用,不用再重复自己了。
python 内建函数(python自带的函数) 数量加起来大概有70多个,今天我们主要讲常用的一些,至于更多的内容可以在以后的基础教程里慢慢学到。
除了DRF原则之外,用 python 的内建函数还有另一个好处,那就是它通常比我们自己实现得更好,更合理。
因为python语言本身是基于C语言实现的,而大部分内建函数均是基于C语言编写并编译成二进制的,所以在运算效率上比我们用 python 再实现一遍要高很多。
当然python语言中还有更多非计算密集型的函数和模块是基于python语言本身实现的,在这里我们只需要明白内建函数通常在计算密集型的情况下性能更好即可。
关于计算密集型的概念在本文末尾会有一个简单的解释(坦白地讲,其实现在还有不少 “程序员” 对这个概念都模糊不清)。
举个简单的例子,我们设计一个函数,让计算机帮我们进行数字累加,从1+2+3+4+n 一直加到1亿。这对于人类来说已经是一个天文数字了,但是在计算机的世界里仅仅是一眨眼的时间即可完成的。
看到了吗,简单的说,内建函数的性能比自定义函数高很多,并且实现上也更加的优雅,通常可以用在需要提高计算性能以及精简冗余代码的地方。
迭代对象(iterable):这个东西的简单解释为可以用来进行循环取值的一个对象,例如python中的(列表、元组、字典等)本文后面会大量说到可迭代对象这个词,特在此做一个解释。
sum函数
官方解释: 从 start 开始,从左到右对迭代对象中的元素求和。 start 默认是 0,迭代的 item 通常是数字,并且不允许 start 的值为字符串。
人话解释: sum函数用于求和,统计列表里数值累加的总和。
这类题目让我想起了小学的数学题和暑假生活课本上的习题。
type函数
官方解释: type函数有一个参数时,返回 object 的类型。返回值是一个类型对象,通常与 object.class 返回的对象相同。
人话解释: type函数用于返回某个对象的数据类型,也可以用它创建一个对象。
我们可以用type检查对象的类型,以便于做出下一步选择。
print函数
官方解释:将 objects 打印到文本流 file 中,以 sep 分隔,然后以 end 结尾。必须将 sep,end,file 和 flush(如果存在)作为关键字参数给出。
人话解释:用于在屏幕上显示内容。
这大概是我们在整个教程里出现频率最高的内建函数了,在这里就不多做解释了,print一切吧。
print函数经常用在内容输出上,用它能做一个简单的命令行程序界面。实际上到最后我们经常用它来调试代码(不是最佳方案)。
len函数
官方解释:返回对象的长度(条目数量)。参数可以是一个序列(如 string、bytes、tuple、list 或 range)或集合(如字典、set 或 frozenset)
人话解释:len函数通常用来判断对象的长度(字符串、列表、字典等等)
例如我要统计一篇文章的长度,同样可以用len函数来完成。
在上面这段代码里我用到了open函数打开一个本地文本文件,不过在今天的教程里我不打算介绍它,留着日后再说吧。
max函数
官方解释: 返回迭代对象中的最大项或两个或更多个参数中最大的项。
人话解释: 返回迭代对象里的最大值,或者返回两个可迭代对象中数字加起来最大的那一个迭代。
以上代码用于返回年龄列表(age_list)中年龄最大的值。
以上代码用于返回两个年龄列表中加起来数值最大的那一个列表。
min函数
官方解释:返回迭代对象中的最小项或两个或更多个参数中的最小项。
人话解释:返回迭代对象里的最小值,或者返回两个可迭代对象中数字加起来最小的那一个迭代。
min函数和max恰好相反,求最小值。
abs函数
官方解释:返回一个数字的绝对值。参数可以是整数或浮点数。如果参数是一个复数,则返回它的模。
人话解释:负数可以变成正数,正数不会变化。也可以求复数模(复数在本章不做理解)
绝对值的定义我记得在初中就学过,abs函数通常用于数值计算。
round函数
官方解释:返回在小数点后舍入到精度 ndigits 的 number 。如果 ndigits 被省略或者是 None,它将返回最接近的整数表示。
人话解释:对数字进行四舍五入,可以包含指定位数的小数点。
python的round函数有时候不一定能得到精确的结果,这跟浮点数的计算规则有关,如果用于精确计算的场合,建议用 decimal 这个库来处理,在这里不做详细展开。
sorted函数
官方解释:从迭代对象中的元素中返回一个新的排序列表。有两个可选参数,必须将其指定为关键字参数。
人话解释:对列表、元组、字典进行排序,可以从小到大,也可以从大到小,默认从小到大。
应用场景:sorted可以用于对班级成绩、人员年龄、编号等做排名。
reversed函数
官方解释:返回一个反向迭代器。seq 必须是具有 reversed() 方法或支持序列协议( len() 方法和整数参数从 0 开始的 getitem() 方法)的对象。
人话解释 : 反转一个序列(列表,元组)的顺序。
range函数
官方解释:range 严格来说不是一个函数,它实际上是一个不可变的序列类型。
人话解释:range可以为我们生成一个可迭代(循环)的对象,并且它是一个不可变的数据类型。
需要注意的是在第一个range对象里我生成了10个数字,默认从0开始,所以最后的数字范围是从0-9,如果我们想要得到1-10,那么可以改为 range(1,10)
all函数
官方解释:如果迭代对象所有元素均为True(或者iterable为空),则返回True, 否则为False。
人话解释:如果某个序列中的值全部为真或者为空就返回真(True),否则返回假(False)。
需要注意的是python的逻辑判断时均认为 数字零 (0、0.0) 、 空字符串(单引号、双引号、三引号)、空列表 []、空元组 ()、空字典 {} 的值都是False。反之都是True。
这个函数通常可以用到判断某个逻辑判断结果集合里是否全部为真,而不用遍历每一个结果,挨个判断。
比如下面这段代码我们要判断10个人里性别是否都为女性,第1到第6行代码仅仅作为数据生成和展示,不用关心具体语法,我们只需要看明白第8行代码即可。
any函数
官方解释:如果迭代对象中有任何一个元素为 True则返回 True。如果 iterable 为空或者全部为False,返回 False。
人话解释:any函数和all函数作用类似,不过条件不一样,all函数要求是全部为True才行,any要求是只要有一个是True就行,另外两者在处理空的时候逻辑相反。
同样来一个判断性别判断的列子。
int函数
官方解释:返回一个由数字或字符串 x 构造的整数对象,如果没有给出参数,则返回 0。
人话解释:将包含整数数字内容的字符串转换为整数类型。
str函数
官方解释 :返回一个字符串对象
人话解释:差不多,可以将任意内容转换为字符串
id函数
官方解释:返回一个对象的 “身份”。它是一个整数,它在其生命周期中保证对这个对象唯一且恒定。具有非重叠生命周期的两个对象可能具有相同的 id() 值。
人话解释:用于获取对象的内存地址标志,我记得在上一章值传递和引用传递中,可变对象和不可变对象讲到过。
大家可能会注意到,当我们对不可变对象(整型数字)取内存地址时,不管是取变量还是取跟变量相同的值,它的地址都是一样的,除非它的值发生了改变。
但是当我们对可变对象 (列表和字典)取内存地址时,它的变量和另一个相同的值的内存地址都不一样。
记住这个特性,至于为什么python要这么设计,我们将在以后的高级课程中讲到。
补充说明
计算密集型: 消耗CPU资源进行运算,比如计算圆周率、对视频进行高清解码、对图片进行人脸识别等。
IO密集型(Input Output): 消耗硬盘和内存资源进行读写操作,比如文件的读写操作。
python语言本身适合IO密集型的应用,并不适合计算密集型的应用,所以牵扯到计算密集型的操作尽量都用内建函数或模块甚至别的语言完成。
当然诸位日常编程几乎很难遇到所谓的性能瓶颈,即使遇到了也可以有很多办法去解决,如果以后有人对本文的读者说“python语言性能差”之类的话时,诸位不用急着争辩,问问对方清不清楚python语言性能差在哪?哪些适合,哪些不适合。
最后给大家普及一下程序员的“三大美德”,由Perl语言创始人拉里.沃尔(Larry Wall)所提出。
1、懒惰
是这样一种品质,它使得你花大力气去避免消耗过多的精力。它敦促你写出节省体力的程序,同时别人也能利用它们。为此你会写出完善的文档,以免别人问你太多问题。
2、急躁
是这样一种愤怒——当你发现计算机懒洋洋地不给出结果。于是你写出更优秀的代码,能尽快真正的解决问题。至少看上去是这样。
3、傲慢
极度的自信,使你有信心写出(或维护)别人挑不出毛病的程序。
当然可以再加上另外两大美德:
DRY原则
“不要和别人争论某种语言好坏”原则
下一章的教程我们会讲到循环,好玩极了,大家期待吧。
相关推荐
- acer笔记本电脑怎么恢复出厂设置
-
acer笔记本电脑恢复出厂设置方法/步骤1/3点击更新和安全选择Windows设置的更新和安全选项。2/3点击恢复选择左侧的恢复选项。3/3点击开始选择重置电脑下方的开始选项即可。1.备份重要数据:在...
- 购买的音乐u盘音乐保护(音乐u盘有病毒吗)
-
方法一:硬件写保护 硬件写保护比较简单,一般U盘上均有物理开关,拨开即可。 方法二:转换U盘格式 一般用户的U盘都是FAT32格式的,因此我们先要将U盘转换成NTFS格式,FAT32转NTFS数...
- win10要什么配置才能装(win10要什么配置才能装系统)
-
Windows10的最低配置要求包括:1GHz或更快的处理器、1GBRAM(32位)或2GBRAM(64位)、16GB可用存储空间(32位)或20GB(64位)、DirectX9兼容显卡以及8...
- 笔记本电脑没有无线网络连接
-
我们经常会需要用笔记本电脑进行上网等操作来获取到外界信息,不过有网友遇到了上网问题,笔记本电脑无internet连接WiFi怎么回事?网络连接WiFi显示无internet怎么办?下面就教下大家笔记本...
-
- 电脑上的文件夹如何设置密码
-
要在电脑桌面上的文件夹上设置密码,需要借助第三方软件或操作系统自带的加密工具。可以使用WinRAR、7-Zip等压缩解压软件的加密功能,对文件夹进行压缩并设置密码。也可以使用Windows自带的加密文件系统(EFS)对文件夹进行加密,只需在...
-
2026-01-09 22:51 off999
- 电脑配置单4000左右(电脑配置推荐4000)
-
2、3599元这款配置采用的是AMD的Ryzen53500X处理器,如果你不喜欢英特尔的话,选择这款配置自然更佳,价格虽然比上款配置贵了七百元,但是在CPU方面提升较大。AMD的3500X处理器为6...
- win10wifi驱动程序下载(win10wifi驱动官方下载)
-
win10安装wifi驱动方法如下1/4同时按住Windows键和R键,打开运行框。键入devmgmt.msc,然后按确定打开设备管理器。 2/4展开"网...
- 为什么电脑蓝屏了(电脑为什么蓝屏怎么解决)
-
1、电脑使用过度,温度过高过度使用电脑会导致电脑硬件发生损坏,系统超载,内部运算过多,cpu温度急剧升高,会发生系统错误。建议更换散热系统,更新“小风扇”设备,并合理使用电脑。2、内存条灰尘积压,或...
- 电脑耳机没声音(电脑耳机没声音怎么解决)
-
1、可能是耳机没有完全插入电脑音频接口,重新插入再确认是否有声音。2、可能是耳机差错音频接口(插成麦克风接口),更换接口再插入确认。为什么耳机连接电脑没有声音耳机连接电脑没有声音的原因3、可能是电脑...
- 0xc000000e(电脑蓝屏0xc000000e)
-
方法一、断开外部设备的连接0xc000000e错误可能是由于硬件故障或不兼容。要检验是不是这个原因,你可以先断开电脑最近连接的外部设备。另外,拔掉电脑或主机上的存储设备,比如U盘、读卡器,还有CD、D...
- wifi不可上网怎么办(明明连接上wifi,却显示不可上网)
-
一般都是路由器不稳定造成的wifi连接是不能上网,可以先把家里的路由器断电源之后再重新设备启动,通常都可以正常使用了;也有可能是出现故障导致wifi连接上不能上网,可以打电话给宽带客服查询是否欠费,若...
- 微软官网正版win10系统价格(微软官网正版win10系统价格表)
-
微软官网下载的win10,只有用正版密钥激活后才是正版的。如果用工具激活就是盗版的。微软操作系统是美国微软开发的Windows系列视窗化操作系统。个人版目前最高版本为Windows11,因为微软的个...
- 什么主板最好(i714700kf配什么主板最好)
-
1.华硕主板:是全球知名的主板制造商,定位一线品牌,市场占有率最大。2.技嘉主板:技嘉科技是全球一线主板制造,产品包括电脑、通讯与消费性电子产品,技嘉主板的出货量仅次于华硕主板,同属一线品牌。3.微星...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
