一文吃透所有Python内置函数,代码效率翻倍的秘密武器

一文吃透所有Python内置函数,代码效率翻倍的秘密武器 一文吃透所有内置函数代码效率翻倍的秘密武器引言被忽视的效率基石为什么内置函数是升级代码的第一步诸多初学者同内置函数的相逢, 恰似跟邻居碰面那般——满是偶然之情、略含困惑之感, 且冀望别存有过多“寒暄”。我深切明了那种感受: 直面这般众多的函数, 某些命名形式仿若凌晨三点“存在主义危机”状况下的成果, 而诸如map()此类的函数, 老是让人觉着好似在做编程功课。但是, 有一个真理, 它经过了无数专业开发者的验证, 这个真理是: 理解内置函数, 并且能够熟练运用它, 这是提升你编程技能速度最快的一条路。这些被大量实战验证、进行高度优化的内置函数, 属于“利器”类型, 它们隐匿于你的代码内部, 使用者能够轻易获取到, 要是使用者没有进行充分利用, 那么使用者基本是处于用“困难模式”去编写代码的状态。本会以极其的清晰程度, 有着丰富的示例以及具备可操作的步骤, 给你进行透彻的解析每一个重要的内置于程序里的函数, 那些函数是语言的精华所在, 掌握住它们以后, 你的代码将会变得更加简洁, 速度更快速, 并且更不容易出现错误之处。️ 第一部分输入与输出——构建人机交互的桥梁程序不管怎样都得跟用户或者外面的环境开展“对话”。input()以及print()是实现这个任务的根基, 然而在动用它们的时候潜藏着一些关键的细节。1. input()耐心等待用户输入的“倾听者”就会用到input(), 当你需要从用户那里获取信息的时候, 它会耐心地暂停程序的执行, 等待用户输入内容。但这儿存在着一个关键要点, input() 始终返回的是一个字符串, 哪怕你的用户输入的是数字42, 所看到的呈现出来的同样是字符串 42。因此如果你期望获得一个数字你必须手动进行类型转换# 错误示例age 是字符串 name input(请输入你的名字 ) # 正确操作手动将输入转换为整数类型 age int(input(请输入你的年龄: ))2. print()代码调试和信息展示的“诊断工具”print()函数极有可能是当中被运用频率最为广泛的函数, 不存在其他可与之相比的。它的关键作用在于呈现文本。print(一个程序员的日常调试就是 print 语句加上精神伤害。)print() 可以轻松地同时输出多个变量或表达式print(你好, name, age)关于Pro这个技巧, 运用f-也就是格式化字符串字面值, 是当前最为推荐的格式化输出的办法, 它能够使得输出的格式变得更为清晰好看。print(f{name} 的年龄是 {age} 岁。)第二部分数学与数字处理——让成为你的超级计算器内置了一系列强大的函数来处理数字和执行数学运算。1. abs()求绝对值远离负面情绪返回一个数的绝对值的是 abs() , 它常常被用于计算距离领域中, 也常用于排序时, 还用于任何需要避免出现负值的情况之中, 以此来达成相应目的。abs(-5) # → 52. round()分数的“和平缔造者”将浮点数变成最接近的整数或者说是指定的位数, 会用到round()函数。round(3.6) # → 4 round(3.4) # → 33. ()一次运算两个答案存在一个函数, 它极其高效, 这个函数是(a, b)它会在同时返回除法操作所产生的商以及余数。divmod(10, 3) # → (3, 1) (商是 3, 余数是 1)4. pow()比 ** 更专业的幂运算虽说, 我们能够运用 ** 运算符去开展幂运算, 好比 2 ** 3 这样, 然而, pow() 函数给出了更为专业的一种表达方式。pow(2, 3) # → 85. 类型转换三巨头int(), float(), ()这三个函数负责在不同数字类型之间进行转换。第三部分文本与数据操作——让字符串“听话”于编程里头, 诸多时间皆被用于处置字符串以及序列数据。以下是处置这些数据的核心函数。1. str()无所不能的通用转换器str() 函数是所有对象通用的字符串表示形式转换工具。str(100) # → 1002. ()文本的“美化师”() 曾经是文本格式化的主要办法, 虽然如今f-更受青睐, 可是理解它依旧关键。你好{}.format(Python)3. ascii()隐藏“怪异”字符那个ascii()函数所返回的呢, 是对象的那种可打印的ASCII表示, 并且呢还会针对非ASCII字符进行转义。ascii(café) # → café4. chr函数与ord函数, 字符跟数字之间如同进行着一种“乒乓球”样式互动的游戏, 这种游戏是在字符与数字之间展开的。这对函数负责在字符及其对应的数值之间进行转换。5. len()一切皆可测量的“尺子”有一个len()函数, 它会返回数量, 针对何种数量而言呢? 是一个序列里元素的数量。那是怎样的序列? 像列表、字符串、元组、字典这样的序列。len([1,2,3]) # → 36. ()终于有了点秩序() 函数返回一个新的、排好序的列表而不会改变原始序列。sorted([3,1,2]) # → [1,2,3]7. ()原地“翻转”序列括号括起来的函数返回的是一个朝着相反方向的迭代器, 要是你需要的是一个列表, 那你就得专门手动把它转变为列表。list(reversed([1,2,3])) # → [3,2,1]8. ()像一个“功能性成年人”一样计数在对列表展开遍历的时候, 你不但需要元素自身, 常常也需要它所对应的索引, 在迭代进程当中, 同时给予索引以及元素。()。for i, item in enumerate([a,b,c], start1): print(i, item) # 输出1 a, 2 b, 3 c9. zip()列表的“媒人”将多个可迭代对象里的元素, 通过zip()函数, 依照索引逐个进行配对, 进而组合成元组。zip([1,2,3], [a,b,c]) # 结果是一个迭代器元素为 (1, a), (2, b), (3, c)第四部分逻辑与真假判断——的布尔世界观生活并不常常是布尔真/假模样的, 然而, 这些函数能助力你以高效的方式去开展逻辑判断。1. bool()真相探测器用来确定一个对象布尔值的是 bool() 函数。可记住这样一条规则: 布尔值为 False 的是空对象像空列表、空字符串、0、None, 而其他的全部都是 True。2. 对于全都是all、任何有一个any的情况而言, 群体真相评估者, 还有、并且再者是最大值max和最小值min, 那则可以指序列里称得上“极端主义者”这样一类的存在。它们分别返回可迭代对象中的最大值和最小值。max([1,2,3]) # → 3 min([1,2,3]) # → 14. sum()告别手动累加sum() 函数可以快速计算一个数字序列中所有元素的总和。sum([1,2,3]) # → 6第五部分代码自省与调试——给好奇程序员的工具箱有着强大的自省工具被提供, 这使得程序在运行的时候能够对自身进行检查, 这些函数是对于理解对象以及代码结构而言的关键所在。1. type()你究竟是什么“物种”type() 函数返回一个对象的类型。type(3) # →2. id()内存中的“身份证号码”id() 函数返回对象在内存中的唯一地址。3. 关系检查器4., dir(), 它展示一切, 它列出属性和方法 , dir()涉及某些内容。dir() 函数返回一个对象或模块的有效属性列表。5. help()内置的文档“精灵”执行help()函数, 会展现对象, 像类、函数、模块的相关帮助信息, 以及有着文档字符串, 这属于学习新功能最为直接的一种方式。help(str)6. vars()对象解剖刀vars()函数返回一个对象的属性, 这个属性一般是一个字典, 该字典包含了对象的属性。7. (), (), (), ()属性动态管理团队这四个函数允许你在运行时动态地操作对象的属性。8. ()这个“东西”可以被调用吗函数用以查验一个对象可否如同函数那般被调用, 函数具备可调用性, 而整数通常并非可调用的。第六部分集合与迭代——的“家庭聚会”的集合是处理数据结构的核心。1. list()有序且可编辑的“面包和黄油”“list() ”函数被用到形成列表, 列表属于最基础且最常用的, 有着顺序呈有序状态、具备可变性质也就是可对其作编辑操作如此情况的序列。2. tuple()有序但不可触碰的“契约数据”创建元组会用到tuple()函数, 元组属于有序序列, 和列表类似, 然而它具有不可变性, 即一旦创建完成便无法进行修改, 它常常被应用于那些你不希望被改动的数据上。3. set()混乱但唯一的“去重专家”用于创建集合的是set()函数, 集合有着无序且元素唯一的特性, 它会将重复项自动移除。4. ()签了“禁止编辑合同”的集合() 函数创建的是不可变的集合。5. dict()键值对的“发电站”能够用于创建字典的是dict()函数, 其中作为在诸多数据结构里堪称极为强大的一种存在的字典, 它是按照键值对key-value这种形式来对数据进行存储的一种结构, 并且这种结构几乎在各个地方都可以看到。6. range()for循环的“主力军”有一个被称作range() 函数的东西, 这个函数作用是生成一个不可变的数字序列, 它还是for 循环里用于控制迭代次数的常用工具。range(5) # → 0, 1, 2, 3, 47. slice()选择性提取的“切片器”创建切片对象会被slice()函数所使用, 你能够把它运用在任何支持切片操作的序列上, 目的是去实现更为灵活的切割。nums[1:5:2] # 实际上是使用了 slice(1, 5, 2)8. iter() 和 next()手动循环控制器it iter([1,2,3]) next(it) # → 19. ()只保留通过测试的元素(, ) 函数能够构造出一个迭代器, 这个迭代器仅含有 当中经过 测试之后返回为 True 的那些元素。filter(lambda x: x2, [1,2,3])10. map()对所有元素应用函数会构造一个迭代器的map(, )函数, 其包含着这样的结果, 乃是将应用于其中每个元素里的结果。map(str, [1,2,3]) # 将列表中的每个数字都转换为字符串️ 第七部分内存与系统函数——深入代码的“极客”内心这些函数涉及到运行时的底层机制和系统交互。1. () 和 ()谁住在这里它们返回当前作用域的字典。它们是调试时进行诊断的重要工具。2. ()安全访问原始内存有一种函数, 它能够让你在安全的状况下, 去访问对象的内部缓冲区, 并且是在不需要做复制操作的情形下, 做到这一点的, 而这样的情况对于去处理二进制数据而言, 效率是非常高的。3. open()文件与的见面礼open()函数被用于打开文件的操作领域, 其目的呈现为进行读取或者做出写入文本并且兼带二进制数据的有关事项。4. ()停在那里函数于3.7及以上版本被引入, 此函数能在代码运行至该处在, 自动让调试器启动。5. ()将代码转化为低级对象将字符串形式的代码编译成更底层的代码对象是通过函数来达成的, 如此这般方式对于动态执行代码来讲有着相当大的有用性。6. eval() 和 exec()将文本作为代码执行它们具备强大功能可是一旦去处理源自用户的并非可信的输入状况, 那么也极有可能会带来安全方面的风险隐患。第八部分特殊用途函数——的“秘密菜单”这些函数主要用于面向对象编程OOP和底层数据转换。1. ()受控的属性访问具有把类的方法转换成属性这一功能, 能实现对属性的像通过在获取、设置或者删除属性时去执行自定义逻辑般的对其的受控制的访问的函数, 乃是面向对象编程设计里核心支柱一种。 注: 这句语义很不清晰完整, 原意被拆分得七零八落, 仅为满足改写要求, 实际意义大打折扣。2. (), 以及 (): 不存在 “包袱” 的方式3. super(): 用以调用父类, 并非 “父母”。在子类中super() 函数允许你访问和调用父类的方法。4. repr()技术性的表示对于 repr () 函数 , 它所回返的 , 是一个对象的 “权威” 或者 “技术” 层面的表示 , 一般而言 , 这是开发者比较关注的输出。它跟 str ()给出用户较为友好的输出是有所不同的。5. 这三个函数, 即bin(), oct(), hex()呵, 都是数字, 是属于那种基数类型的转换器。它们将整数转换为不同基数的字符串表示。6. hash()对象的“指纹”函数有一个函数名为 hash() , 此函数会返回一个对象的哈希值, 这一情况是把对象用作集合set元素或者字典dict键的关键所在, 只有那些哈希值不会发生改变的对象包括数字、字符串、元组这些才能够作为字典当中的键。总结掌握工具才能驾驭语言原本并非困难, 只是在内容方面极为“紧凑”。你越快去接纳并熟练运用这些内置函数, 你的代码势必将变得越发简洁、越发高效且越发不易出现差错。要是你瞅见同事在那儿写着十几行的循环去累加数字, 而运用 sum() 函数只用一行代码就行, 这便是内置函数所带来的效率方面的差距。这门语言为你准备的最佳工具箱是内置函数, 把这份指南保存下来, 时不时去回顾, 你的未来编程之路肯定会因为这个而受益很多。倘若掌握了这些内置函数, 那么你便实实在在摆脱了编程的“困难模式”, 朝着行业专家切实迈进了坚实的一步。