首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一些值得学习的Python内置函数

在我教的每一节Python入门课上,经常都会被问道像“我们如何才能知道所有这些”这样的问题。

通常还伴随着这些问题:

1.Python中有很多函数,记住这些函数的最好方法是什么?

2.学习我们日常需要的函数,如enumerate 和 range,最好的方法是什么?

3.你是如何知道Python中解决问题的所有方法的?你记下来了吗?

有几十个内置函数和类,数百个工具捆绑在Python的标准库中,以及PyPI上的数千个第三方库。任何人都不可能记住所有这些东西。

我建议你对你的知识进行分类:

1.我应该记住的东西,这样我就能很好地理解它们

2.我应该知道的东西,这样我以后才能更有效地查找它们

3.我根本不应该为之烦恼的东西,除非有一天我需要它们

将这个方法记在脑海中,我们来浏览Python文档中的内置函数页面。

这将是一篇很长的文章,所以在下一节中我将链接到5个子部分和20个特定的内置函数,所以如果你有时间或者正在寻找一个内置函数,你可以提前跳过去查看。

你应该了解哪些内置组件?

我估计大多数Python开发人员只需要大约30个内置函数,但是哪30个取决于你实际使用Python做什么。

我们将以鸟瞰的方式来看看Python中的所有的69个内置函数。

我将尝试把这些内置组件分成五类:

众所周知: 大多数python初学者会因为需要而很快地接触到这些内置组件

初学者所忽略的: 了解这些函数很有用,但是当你是Python新手时,就会很容易忽略它们

稍后再学习的: 了解这些内置组件通常很有用,但是当/如果你需要它们时,你就会找到它们

也许最终会学的: 这些东西迟早会派上用场,但只是在特定的情况下

你可能不需要这些: 除非你在做一些相当专业的事情,否则你不太可能会需要这些

类别1和类别2中的内置函数几乎是所有Python程序员最终都应该学习的基本内置函数。类别3和类别4中的内置函数是专门的内置函数,它们通常非常有用,但是你对它们的需求会根据你对Python的使用情况而有所不同。类别5是神秘的内置函数,当你需要它们时,这可能非常方便,但是许多Python程序员可能永远都不需要它们。

Python高手请注意: 我将把所有这些内置组件都称为函数,尽管其中的27个实际上并不是函数(如我的函数和callables文章中所讨论的)。

常见的内置函数(你可能已经很熟悉了):

print

len

str

int

float

list

tuple

dict

set

range

经常被新的Python编程者所忽略的内置函数:

sum

enumerate

zip

bool

reversed

sorted

min

max

any

all

还有5个通常被忽略的内置函数,我建议你自己去了解它们,因为它们使调试更容易: dir、vars、breakpoint、type和help。

除了上面的25个内置函数之外,我们还将在稍后的“以后学习并可能最终会学习的”和“你可能不需要这些”部分中简要介绍其他的44个内置函数。

10个常见的内置函数

如果你一直在编写Python代码,那么这些内置程序对你来说可能已经很熟悉了。

print

你已经知道了print函数。实现hello world需要用到print。

你可能不了解print所接受的各种关键字参数:

你可以自己查看print函数。

len

在Python中,我们不写像my_list.length()或my_string.length()这样的函数; 相反,我们会奇怪地(至少对于新的python开发者来说)使用len(my_list)和len(my_string)。

无论你是否喜欢这个类似于操作符的len函数,你都必须使用它,所以你需要习惯它。

str

与许多其他编程语言不同,你不能在Python中连接字符串和数字。

Python拒绝将3个整数强制作为一个字符串,所以我们需要自己手动执行,使用内置的str函数(技术上来说是类,但正如我所说的,我将所有这些都称为函数):

int

你是否有用户输入并需要将其转换为数字?那你就需要int函数!

int函数可以将字符串转换为整数:

你还可以使用int将浮点数截断为整数:

注意,如果你在进行除法运算时需要截断,//操作符可能更合适(尽管它对负数的运行情况会不同):int(3 / 2) == 3 // 2。

float

你要转换为数字的字符串实际上不是一个整数吗?那么你将使用float而不是int来进行转换。

你还可以使用float将整数转换为浮点数。

在python2中,我们常常使用float将整数转换为浮点数来强制进行浮点除法而不是整数除法。“整数除法”在Python 3中已经不存在了(除非你专门使用//运算符),因此我们不再需要float来实现这个目的。如果你一旦在Python3代码中看到float(x) / y,你就可以把它改成x / y。

list

想要创建一个其他一些可迭代对象的列表吗?

list函数就是做这些的:

如果你知道你在处理一个列表,你可以使用copy方法来创建一个该列表的新副本:

但是如果你不知道你正在处理的可迭代对象是什么,list函数是循环一个可迭代对象并复制它的更通用的方法:

你也可以使用一个列表推导式,但我不推荐这样做。

注意,当你想要创建一个空列表时,建议使用列表字面量语法(那些[]括号):

使用[]被认为更符合习惯,因为那些方括号([])实际上看起来像一个Python列表。

tuple

tuple函数与list函数非常相似,只是它会创建元组:

如果你需要一个元组而不是列表,比如是因为你正在尝试创建一个可在字典的键中使用的可哈希集合,那你可能会想要使用tuple而不是list。

dict

dict函数用于创建一个新字典。

与list和tuple类似,dict函数等价于在一个具有键值对的迭代器上进行循环,并从中生成一个字典。

给定一个两项元组的列表:

这个:

可以用dict函数代替来生成:

dict函数接受两种类型的参数:

1.另一个字典(通用术语是映射),在这种情况下,该字典将被复制

2.一个由键值元组组成的列表(更准确地说,是由两项迭代器组成的一个迭代器),在这种情况下,将从这些元素构造一个新字典

所以这也是可行的:

dict函数还可以接受关键字参数来创建一个带有基于字符串键的字典:

但我更喜欢用字典字面量来代替:

字典字面量语法更灵活,速度更快,但最重要的是,我发现它更清楚地传达了我们正在创建一个字典的事实。

就像list和tuple一样,一个空字典也应该使用字面量语法来创建:

使用{}稍微提高了CPU效率,但更重要的是,它更符合人们的习惯: 使用大括号({})创建字典是很常见的,但是dict出现的频率要低得多。

set

set函数生会成一个新的集合,它接受一个带有可哈希值的迭代器(字符串、数字或其他不可变类型),并返回一个set:

使用{}集合字面量语法(纯 {} 会创建一个字典)无法生成空集合,因此set函数是生成空集的唯一方法:

事实上,这是一个谎言,因为我们有这个:

但是这种语法令人困惑(它依赖于*操作符的一个不太常用的特性),所以我不推荐使用它。

range

range函数给我们返回一个range对象,它表示一个数字范围:

得到的数字范围包括开始数字,但不包括停止数字(range(0,10)不包括10)。

当你想对一些数字进行循环时,range函数很有用。

一个常见的用例是执行一个操作n次(顺便说一下,这是一个列表推导式):

Python 2的range函数会返回一个列表,这意味着上面的表达式将生成非常非常大的列表。python3的range运行方式与python2的xrange类似(尽管它们有一点不同),因为当我们在这些range对象上循环时,数字是延迟计算的。

被新进的Python高手忽略的内置函数

如果你已经使用Python编程了一段时间,或者刚刚学习了Python类的介绍,那么你可能已经了解了上面的内置函数。

现在,我想展示15个内置函数,这些函数非常便于了解,但是常常被新进的Python高手所忽略。

你将在Python代码中发现前10个函数,但最后5个函数最常在调试时使用。

bool

bool函数会检查一个Python对象的真实性。

对于数字,真实性是一个非零的问题:

对于集合,真实性通常是一个非空的问题(集合的长度是否大于0):

真实性(在文档中称为真值测试)在Python中非常重要。

代替询问一些关于一个容器长度的问题,许多Python高手会问一些有关真实性的问题:

你可能不会经常看到bool的使用,但是在需要将值强制转换为布尔值以询问其真实性的情况下,你会想要了解bool。

enumerate

每当你需要向上计数时,每次一个数字,同时循环遍历一个迭代器, enumerate函数就会派上用场。

这似乎是一个非常小众的任务,但它经常出现。

例如,我们可能想要跟踪一个文件中的行号:

enumerate函数也常常用来跟踪序列中项目的索引。

注意,你可能会看到较新的Python专家在Python中使用range(len(sequence))。如果你看到带有range(len(…))的代码,那你几乎总是希望使用enumerate来代替。

如果enumerate对你来说是一个新用法(或者如果你经常使用range(len(…)),请查看我关于在Python中使用索引进行循环的文章。

zip

zip函数甚至比enumerate函数更加专门化。

zip函数用于同时循环多个迭代器。

如果你必须同时循环两个列表(或任何其他迭代器),则首选zip而不是enumerate。当你在循环时需要索引时,enumerate函数非常方便,但是当我们特别关心同时循环两个迭代器时,zip就非常棒了。

如果你是zip新手,我还将在我的“使用索引进行循环”文章中讨论它。

enumerate 和 zip都会向我们返回迭代器。迭代器是用来增强for循环的延迟可迭代对象。我有一个关于迭代器的完整讨论,以及一篇关于如何创建自己的迭代器的高级文章。

顺便说一下,如果你需要对不同长度的迭代器使用zip,你可能需要在Python标准库中查看 itertools.zip_longest。

reversed

reversed函数,像enumerate和zip一样,也会返回一个迭代器。

我们可以对这个迭代器做的唯一一件事就是对它进行循环(但只能循环一次):

与enumerate和zip类似,reversed是一种循环辅助函数。你会更多的发现,reversed专门用于for循环的for部分中:

除了reversed函数外,还有其他方法可以反转Python列表:

但是reversed函数通常是反转Python中任何可迭代对象的最佳方法。

与列表的reverse方法(例如numbers.reverse())不同,reversed方法不会改变列表(相反,它返回一个反转项的迭代器)。

与numbers[::-1]切片语法不同,reverse (numbers)不会构建一个全新的列表:它返回的延迟迭代器会在我们进行循环时逆向地检索下一项。此外,reversed(numbers) 比numbers[::-1]更具可读性(如果你以前从未见过这种特殊的切片用法,那么它看起来会很奇怪)。

如果我们结合了reversed 和 zip函数的非复制特性,我们就可以重写palindromic函数(来自上面的enumerate),而不需要占用任何额外的内存(这里不会复制列表):

sum

sum函数接受一个带有数字的迭代器,并返回这些数字的和。

没有比这更多的了。

Python有很多帮助函数可以为你执行循环,部分原因是它们与生成器表达式能很好地匹配:

如果你对生成器表达式感兴趣,我在我的“可理解的推导式”演讲(以及我3小时的关于“推导式和生成器表达式“的教程)中讨论了它们。

min 和 max

min和max函数实现了你所期望的功能:它们会为你返回一个迭代器中的最小和最大项。

min和max函数使用

min和max函数还可以接受一个key函数,允许你自定义特定对象的“最小”和“最大值”的真正含义。

sorted

sorted函数接受任何可迭代的对象,并以排序后的顺序返回该可迭代对象中所有值的一个新列表。

与min和max类似,sorted函数使用

sorted函数还允许通过一个key函数来自定义排序过程(就像min和max)。

顺便说一下,如果你对sorted和list.sort方法的比较感兴趣的话,Florian Dahlitz写了一篇文章来比较这两种方法。

any 和 all

any和all函数可以与生成器表达式配对,以确定一个可迭代对象中的任意项和所有项是否与给定条件相匹配。

我们前面的palindromic函数会检查所有项是否与它们的反转序列中的对应项相等(第一个值是否等于最后一个值,第二个值是否等于倒数第二个值,等等)。

我们可以使用all函数像这样来重写palindromic函数:

将all函数中的条件和返回值全部否定时,我们可以等价地使用any(尽管在这个例子中这有点令人困惑):

如果any和all函数对你来说是新的,那么你可能想阅读我关于它们的文章:《在Python中检查所有项是否与一个条件相匹配》。

英文原文:https://treyhunner.com/2019/05/python-builtins-worth-learning/

译者:测试

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190804A03EUR00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券