了解 Python 最常见的内置函数(python内置函数及其作用)
itomcoil 2025-03-29 18:46 7 浏览
Python 的内置函数基础
Python 的内置函数是该语言不可或缺的一部分,无需额外的库即可提供基本功能。这些函数始终可用,无需导入任何模块即可使用。它们是在 C for CPython(标准 Python 实现)中实现的,这确保了它们针对性能进行了高度优化。
为什么存在内置函数
内置函数的存在使语言更加用户友好和高效。它们提供了一种无需编写其他代码即可执行常见任务的方法,这有助于开发人员节省时间并减少出错的可能性。内置函数还通过提供标准化的操作执行方式来提高代码的可读性和可维护性。这种一致性使开发人员能够快速理解和使用其他人编写的代码。
此外,内置函数封装了复杂的逻辑和优化,使开发人员更容易高效地执行操作,而无需了解底层实现细节。这种抽象对初学者特别有益,因为它允许他们专注于学习语言和解决问题,而不是担心性能和优化。
如何使用内置函数
几乎每个 Python 程序都使用内置函数。它们提供了广泛的功能,从基本的输入/输出操作到复杂的数据操作。以下是如何使用内置函数的一些关键方面:
- 基本操作: len() 和 type() 等 print() 函数用于基本操作,例如显示输出、确定对象长度和检查变量类型。
- 数据操作: max() 、 min() 和 sorted() 等 sum() 函数用于执行各种数据操作,例如计算总和、查找最大值和最小值以及对数据进行排序。
- 函数式编程:像 、 filter() 和 reduce() (来自 functools 模块)这样的 map() 函数通过允许开发人员将函数应用于序列和过滤数据来支持函数式编程范式。
- 迭代和聚合:、 enumerate() 和 range() 等 zip() 函数用于迭代和聚合,从而更轻松地遍历数据和使用索引。
使用内置函数的好处
- 效率:内置函数在 C for CPython 中实现,使其非常高效。它们通常比用纯 Python 编写的等效代码更快地执行操作。
- 可靠性:内置函数经过全面测试并被广泛使用,这意味着与自定义实现相比,它们更可靠且不易出现错误。
- 可读性:使用内置函数使代码更具可读性和可理解性。其他开发人员更容易阅读和理解使用标准函数的代码。
- 方便:内置功能提供了一种执行常见任务的便捷方式。开发人员无需为经常执行的任务编写额外的代码。
关键内置功能的实现和优化
在这里,将看看 Python 的一些关键内置函数的实现细节和优化。了解这些函数是如何实现和优化的,可以帮助你编写更高效的代码,并更好地理解 Python 内置功能的强大功能。
print()
该 print() 函数用于将数据输出到控制台。它可以处理多个参数,默认情况下,这些参数被转换为字符串并与空格连接。
print("Hello,", "world!")
该 print() 函数是用 C 语言在 CPython 中实现的。它使用 sys.stdout file 对象来写入输出,该输出被缓冲以提高性能。默认情况下, print() 在输出末尾添加换行符,可以使用 end 参数自定义该字符。
print("Hello,", "world!", end=" ")
print("This is on the same line.")
缓冲的使用减少了系统调用的次数,使函数更加高效。
len()
该 len() 函数返回对象的长度,该对象可以是序列(如字符串、列表或元组)或集合(如字典或集合)。
my_list = [1, 2, 3, 4]
print(len(my_list))
对于序列,该 len() 函数直接从对象的元数据中检索 length 属性,元数据存储为对象结构的一部分。这意味着在恒定时间(O(1)) len() 下运行,使其非常高效。
sum()
该 sum() 函数返回可迭代对象中所有项的总和,例如列表或元组。
numbers = [1, 2, 3, 4]
print(sum(numbers))
该 sum() 函数使用用 C 编写的高度优化的循环来遍历元素并将它们加在一起。此实现最大限度地减少了与 Python 中的循环相关的开销,使函数非常快。此外, sum() 可以采用第二个参数来指定求和的初始值。
numbers = [1, 2, 3, 4]
print(sum(numbers, 10)) # Starts the sum at 10
max()和min()
max() 和 min() 函数分别返回可迭代对象中的最大和最小项。
numbers = [1, 2, 3, 4]
print(max(numbers))
print(min(numbers))
这两个 max() min() 函数都只迭代一次输入可迭代,为当前最大值或最小值保留单个变量。这确保了这些函数在线性时间 (O(n)) 内运行,其中 n 是可迭代对象中的元素数。这些函数是用 C 语言实现的,这增加了它们的效率。
sorted()
该 sorted() 函数从可迭代对象中的项返回一个新的排序列表。
numbers = [4, 2, 1, 3]
print(sorted(numbers))
该 sorted() 函数使用 Timsort 算法,该算法是从合并排序和插入排序派生的混合排序算法。Timsort 非常高效,在最坏的情况下时间复杂度为 O(n log n)。它经过优化,可在真实数据上表现良好,这些数据通常包含部分有序序列。
Timsort 的工作原理是将数据划分为称为“运行”的小块,然后合并它们。它利用数据中的现有顺序来减少所需的比较和交换次数。
更高级的内置功能
除了基本的内置函数外,Python 还提供了一套高级内置函数,可实现更复杂的操作。这些函数支持函数式编程范式和高级数据操作技术,使其成为开发人员武器库中的强大工具。在本节中,我们将深入探讨三个高级内置函数: map() 、 filter() 和 zip() 。
map()
该 map() 函数将指定的函数应用于可迭代对象中的所有项,并返回一个映射对象,该对象是迭代器。
用法示例:
numbers = [1, 2, 3, 4]
squared = map(lambda x: x**2, numbers)
print(list(squared))
在此示例中, map() 将 lambda 函数 lambda x: x**2 应用于列表中 numbers 的每个项目,从而生成一个新的平方值迭代器。
该 map() 函数在 CPython 中用 C 语言实现,这保证了其效率。它以懒惰的方式运行,这意味着它只在需要时将该功能应用于项目。这样可以避免创建中间列表,因为中间列表对于大型数据集来说可能是内存密集型的。
延迟计算允许 map() 高度内存效率,因为它动态生成每个值,而不是将所有结果存储在内存中。这在处理大型数据流或数据转换管道时特别有用。
filter()
该 filter() 函数从指定函数返回 true 的可迭代对象的元素构造迭代器。
用法示例:
numbers = [1, 2, 3, 4]
even_numbers = filter(lambda x: x % 2 == 0, numbers)
print(list(even_numbers))
在此示例中, filter() 将 lambda 函数 lambda x: x % 2 == 0 应用于列表中 numbers 的每个项目,从而生成偶数的迭代器。
该 filter() 函数也是用 C 语言实现的,并且像 一样 map() ,可以延迟运行。它仅在需要时计算可迭代的每个项目,如果函数返回 true,则包括输出迭代器中的项目。
这种延迟评估可最大程度地减少内存使用并提高性能,尤其是在处理大型数据集或组合多个筛选步骤时。通过避免创建中间列表, filter() 可以减少与数据操作相关的开销。
zip()
该 zip() 函数采用多个迭代对象(零个或多个),将它们聚合到元组中,并返回这些元组的迭代器。
用法示例:
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
zipped = zip(list1, list2)
print(list(zipped))
在此示例中, zip() 将列表 list1 合并 list2 为元组迭代器,其中每个元组都包含输入列表中的相应元素。
该 zip() 函数是用 C 语言实现的,旨在提高效率。它并行迭代输入可迭代对象,即时创建元组,而无需将它们存储在内存中。这样 zip() 既省时又省内存。
zip() 一旦最短的输入可迭代对象用尽,就会停止创建元组,确保不会发生越界错误。这种设计 zip() 特别适用于组合来自多个来源的数据,同时保持性能和安全性。
结合高级内置功能
Python 内置函数的优势之一是它们的可组合性。通过组合 map() 、 filter() 和 zip() ,您可以使用最少的代码创建功能强大且富有表现力的数据转换。
例:
list1 = [1, 2, 3, 4]
list2 = ['one', 'two', 'three', 'four']
combined = zip(list1, list2)
filtered = filter(lambda x: x[0] % 2 == 0, combined)
result = map(lambda x: (x[0], x[1].upper()), filtered)
print(list(result))
在此示例中, zip() 将 和 list2 合并 list1 为元组, filter() 选择第一个元素为偶数的元组,并将 map() 每个元组的第二个元素转换为大写。最终结果是满足指定条件的转换元组列表。
相关推荐
- 点过的网页会变色?没错,这玩意把你的浏览记录漏光了
-
提起隐私泄露这事儿,托尼其实早就麻了。。。平时网购、换手机号、注册各种账号之类的都会咔咔泄露,根本就防不住。但托尼真是没想到,浏览器里会有一个看起来完全人畜无害的功能,也在偷偷泄露我们的个人隐私,而且...
- Axure教程:高保真数据可视化原型
-
本文将介绍如何制作Axure高保真数据可视化原型,供大家参考和学习。高保真数据可视化原型设计,称得上是Axure高阶水平。数据可视化在原型设计中是一个重要的分支,但是对于Axure使用者具有一定要求。...
- Flutter web开发中禁用浏览器后退按钮
-
路由采用的go-router路由框架:finalrootNavigatorKey=GlobalKey<NavigatorState>();finalGoRouterrouter...
- jQuery 控制属性和样式
-
标记的属性each()遍历元素:each(callback)方法主要用于对选择器进行遍历,它接受一个函数为参数,该函数接受一个参数,指代元素的序号。对于标记的属性而言,可以利用each()方法配合th...
- 微信小程序入门教程之二:页面样式
-
这个系列的上一篇教程,教大家写了一个最简单的Helloworld微信小程序。但是,那只是一个裸页面,并不好看。今天接着往下讲,如何为这个页面添加样式,使它看上去更美观,教大家写出实际可以使用的页...
- 如何在Windows11的任务栏中禁用和删除天气小部件图标?
-
微软该公司已在Windows11的任务栏中添加了一个天气小部件图标,作为小部件的入口点。这个功能与之前Win10上的新闻与资讯功能相同,但是有的用户不喜欢想要关闭,不知道如何操作,下面小编为大家带来...
- CSS伪类选择器大全:提升网页交互与样式的神奇工具
-
CSS伪类选择器是前端开发中不可或缺的强大工具,它们允许我们根据元素的状态、位置或用户行为动态地应用样式。本文将全面介绍常用的伪类选择器,并通过代码示例展示其实际应用场景。一、基础交互伪类1.超链接...
- 7个Axure使用小技巧
-
编辑导读:对于Axure原型工具,很少有产品经过系统学习,一般都是直接上手,边摸索边学习,这直接导致很多快捷操作被忽视。笔者在日常工作中总结出以下小技巧,希望对各位有帮助。之前整理了2期Axure的...
- JavaScript黑暗技巧:禁止浏览器点击“后退”按钮
-
浏览网页时,当从A页面点击跳转到B页面后,一般情况下,可以点击浏览器上的“后退”按钮返回A页面。如果进入B页面后,B页面想让访问者留下,禁止返回,是否可以实现呢?这简直是要控制浏览器的行为,虽然有些邪...
- 对齐PyTorch,一文详解OneFlow的DataLoader实现
-
撰文|赵露阳在最新的OneFlowv0.5.0版本中,我们增加了许多新特性,比如:新增动态图特性:OneFlow默认以动态图模式(eager)运行,与静态图模式(graph)相比,更容易搭建网...
- Python计算机视觉编程 第一章 基本的图像操作和处理
-
以下是使用Python进行基本图像操作和处理的示例代码:使用PIL库加载图像:fromPILimportImageimage=Image.open("image.jpg"...
- PyTorch 深度学习实战(31):可解释性AI与特征可视化
-
在上一篇文章中,我们探讨了模型压缩与量化部署技术。本文将深入可解释性AI与特征可视化领域,揭示深度学习模型的决策机制,帮助开发者理解和解释模型的内部工作原理。一、可解释性AI基础1.核心概念特征重要...
- 学习编程第177天 python编程 富文本框text控件的使用
-
今天学习的是刘金玉老师零基础Python教程第72期,主要内容是python编程富文本框text控件。一、知识点1.tag_config方法:利用某个别名作为标签,具体的对应标签的属性功能配置在后面参...
- 用Python讓電腦攝像頭實現掃二維碼
-
importsys#系統模組,用來存取命令列參數與系統功能importcv2#OpenCV,處理影像與相機操作importnumpyasnp#Numpy,用來處理數值與...
- 使用Transformer来做物体检测
-
作者:JacobBriones编译:ronghuaiyang导读这是一个Facebook的目标检测Transformer(DETR)的完整指南。介绍DEtectionTRansformer(D...
- 一周热门
- 最近发表
- 标签列表
-
- ps图案在哪里 (33)
- super().__init__ (33)
- python 获取日期 (34)
- 0xa (36)
- super().__init__()详解 (33)
- python安装包在哪里找 (33)
- linux查看python版本信息 (35)
- python怎么改成中文 (35)
- php文件怎么在浏览器运行 (33)
- eval在python中的意思 (33)
- python安装opencv库 (35)
- python div (34)
- sticky css (33)
- python中random.randint()函数 (34)
- python去掉字符串中的指定字符 (33)
- python入门经典100题 (34)
- anaconda安装路径 (34)
- yield和return的区别 (33)
- 1到10的阶乘之和是多少 (35)
- python安装sklearn库 (33)
- dom和bom区别 (33)
- js 替换指定位置的字符 (33)
- python判断元素是否存在 (33)
- sorted key (33)
- shutil.copy() (33)