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

5a9098de5dfaa03ff94a6777a6f87048.png


在我教的每一节Python入门课上,经常都会被问道像“我们如何才能知道所有这些”这样的问题。
通常还伴随着这些问题:
1.Python中有很多函数,记住这些函数的最好方法是什么?
2.学习我们日常需要的函数,如enumerate 和 range,最好的方法是什么?
3.你是如何知道Python中解决问题的所有方法的?你记下来了吗?
有几十个内置函数和类,数百个工具捆绑在Python的标准库中,以及PyPI上的数千个第三方库。任何人都不可能记住所有这些东西。
我建议你对你的知识进行分类:
1.我应该记住的东西,这样我就能很好地理解它们
2.我应该知道的东西,这样我以后才能更有效地查找它们
3.我根本不应该为之烦恼的东西,除非有一天我需要它们
将这个方法记在脑海中,我们来浏览Python文档中的内置函数页面。
这将是一篇很长的文章,所以在下一节中我将链接到5个子部分和20个特定的内置函数,所以如果你有时间或者正在寻找一个内置函数,你可以提前跳过去查看。你应该了解哪些内置组件?
我估计大多数Python开发人员只需要大约30个内置函数,但是哪30个取决于你实际使用Python做什么。
我们将以鸟瞰的方式来看看Python中的所有的69个内置函数。
我将尝试把这些内置组件分成五类:

  1. 众所周知: 大多数python初学者会因为需要而很快地接触到这些内置组件
  2. 初学者所忽略的: 了解这些函数很有用,但是当你是Python新手时,就会很容易忽略它们
  3. 稍后再学习的: 了解这些内置组件通常很有用,但是当/如果你需要它们时,你就会找到它们
  4. 也许最终会学的: 这些东西迟早会派上用场,但只是在特定的情况下
  5. 你可能不需要这些: 除非你在做一些相当专业的事情,否则你不太可能会需要这些


类别1和类别2中的内置函数几乎是所有Python程序员最终都应该学习的基本内置函数。类别3和类别4中的内置函数是专门的内置函数,它们通常非常有用,但是你对它们的需求会根据你对Python的使用情况而有所不同。类别5是神秘的内置函数,当你需要它们时,这可能非常方便,但是许多Python程序员可能永远都不需要它们。
Python高手请注意: 我将把所有这些内置组件都称为函数,尽管其中的27个实际上并不是函数(如我的函数和callables文章中所讨论的)。
常见的内置函数(你可能已经很熟悉了):

  1. print
  2. len
  3. str
  4. int
  5. float
  6. list
  7. tuple
  8. dict
  9. set
  10. range

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

  1. sum
  2. enumerate
  3. zip
  4. bool
  5. reversed
  6. sorted
  7. min
  8. max
  9. any
  10. all

还有5个通常被忽略的内置函数,我建议你自己去了解它们,因为它们使调试更容易: dir、vars、breakpoint、type和help。
除了上面的25个内置函数之外,我们还将在稍后的“以后学习并可能最终会学习的”和“你可能不需要这些”部分中简要介绍其他的44个内置函数。10个常见的内置函数
如果你一直在编写Python代码,那么这些内置程序对你来说可能已经很熟悉了。print
你已经知道了print函数。实现hello world需要用到print。
你可能不了解print所接受的各种关键字参数:

b84635312c59ed24207beb033d554fac.png


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


无论你是否喜欢这个类似于操作符的len函数,你都必须使用它,所以你需要习惯它。str
与许多其他编程语言不同,你不能在Python中连接字符串和数字。

6720b2de2c8fdd573892200e341cb10f.png


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

de24263606f000e342d34eae1c18419e.png

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

e965a91cf0a92aef5fe26ed9dd8bad8e.png


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

24cdd015f2f50409b0355a198afd881e.png


注意,如果你在进行除法运算时需要截断,//操作符可能更合适(尽管它对负数的运行情况会不同):int(3 / 2) == 3 // 2。float
你要转换为数字的字符串实际上不是一个整数吗?那么你将使用float而不是int来进行转换。

8bb4d4e7420a672e9e36aedcfafa54ef.png


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

2701fc372226e7423019b61f49c889f3.png


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

d9bd8b7b42c2ae526bfeb4d6c4857132.png


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

cef0aba8e621a04d01768f1593547af6.png


你也可以使用一个列表推导式,但我不推荐这样做。
注意,当你想要创建一个空列表时,建议使用列表字面量语法(那些[]括号):

5261fcccdf960184615e999a66845497.png


使用[]被认为更符合习惯,因为那些方括号([])实际上看起来像一个Python列表。tuple
tuple函数与list函数非常相似,只是它会创建元组:

506b3e644e296397f06328d912fd8fa1.png


如果你需要一个元组而不是列表,比如是因为你正在尝试创建一个可在字典的键中使用的可哈希集合,那你可能会想要使用tuple而不是list。dict
dict函数用于创建一个新字典。
与list和tuple类似,dict函数等价于在一个具有键值对的迭代器上进行循环,并从中生成一个字典。
给定一个两项元组的列表:

d80b870ccc56c79f35eb8ec96e2f5d0a.png


这个:

11bb88f1769547b524ddecd95b763989.png


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

11bb88f1769547b524ddecd95b763989.png


dict函数接受两种类型的参数:
1.另一个字典(通用术语是映射),在这种情况下,该字典将被复制
2.一个由键值元组组成的列表(更准确地说,是由两项迭代器组成的一个迭代器),在这种情况下,将从这些元素构造一个新字典
所以这也是可行的:

6822a952b9688a82fd35e6fc5232a62e.png


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

413f40a6f380c8a652a3a23e2870b8ae.png


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

format,png


字典字面量语法更灵活,速度更快,但最重要的是,我发现它更清楚地传达了我们正在创建一个字典的事实。
就像list和tuple一样,一个空字典也应该使用字面量语法来创建:

15edc8962be53c040f7876795a2dc3b6.png


使用{}稍微提高了CPU效率,但更重要的是,它更符合人们的习惯: 使用大括号({})创建字典是很常见的,但是dict出现的频率要低得多。set
set函数生会成一个新的集合,它接受一个带有可哈希值的迭代器(字符串、数字或其他不可变类型),并返回一个set:

5f898ef6044c55323d28470d2afce7de.png


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

11bb88f1769547b524ddecd95b763989.png


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

11bb88f1769547b524ddecd95b763989.png


但是这种语法令人困惑(它依赖于*操作符的一个不太常用的特性),所以我不推荐使用它。range
range函数给我们返回一个range对象,它表示一个数字范围:

f3617a8baf5adfaa220dd7e0d844a1aa.png


得到的数字范围包括开始数字,但不包括停止数字(range(0,10)不包括10)。
当你想对一些数字进行循环时,range函数很有用。

ada8d7e4626412a5dce1b69d0af59113.png


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

a94fe5e0c4fc4ec80782fdc27621b803.png


Python 2的range函数会返回一个列表,这意味着上面的表达式将生成非常非常大的列表。python3的range运行方式与python2的xrange类似(尽管它们有一点不同),因为当我们在这些range对象上循环时,数字是延迟计算的。被新进的Python高手忽略的内置函数
如果你已经使用Python编程了一段时间,或者刚刚学习了Python类的介绍,那么你可能已经了解了上面的内置函数。
现在,我想展示15个内置函数,这些函数非常便于了解,但是常常被新进的Python高手所忽略。
你将在Python代码中发现前10个函数,但最后5个函数最常在调试时使用。bool
bool函数会检查一个Python对象的真实性。
对于数字,真实性是一个非零的问题:

66f0dea03c27cce24942a9372c468a2c.png


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

315f45f105505aa046d116a3b22d6517.png


真实性(在文档中称为真值测试)在Python中非常重要。
代替询问一些关于一个容器长度的问题,许多Python高手会问一些有关真实性的问题:

e331a375e788340d464afd437d9fe34c.png


你可能不会经常看到bool的使用,但是在需要将值强制转换为布尔值以询问其真实性的情况下,你会想要了解bool。enumerate
每当你需要向上计数时,每次一个数字,同时循环遍历一个迭代器, enumerate函数就会派上用场。
这似乎是一个非常小众的任务,但它经常出现。
例如,我们可能想要跟踪一个文件中的行号:

375ded6cc1db9ddfea9cbe4cafd0181f.png


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

064e36f62b69f2071fe63b72d6b9349d.png


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

f2bd669c0efd96e0925d56f939505cce.png


如果enumerate对你来说是一个新用法(或者如果你经常使用range(len(…)),请查看我关于在Python中使用索引进行循环的文章。zip
zip函数甚至比enumerate函数更加专门化。
zip函数用于同时循环多个迭代器。

594b907c3b5b020fb5bde60ff6350356.png


如果你必须同时循环两个列表(或任何其他迭代器),则首选zip而不是enumerate。当你在循环时需要索引时,enumerate函数非常方便,但是当我们特别关心同时循环两个迭代器时,zip就非常棒了。
如果你是zip新手,我还将在我的“使用索引进行循环”文章中讨论它。
enumerate 和 zip都会向我们返回迭代器。迭代器是用来增强for循环的延迟可迭代对象。我有一个关于迭代器的完整讨论,以及一篇关于如何创建自己的迭代器的高级文章。
顺便说一下,如果你需要对不同长度的迭代器使用zip,你可能需要在Python标准库中查看 itertools.zip_longest。reversed
reversed函数,像enumerate和zip一样,也会返回一个迭代器。

11bb88f1769547b524ddecd95b763989.png


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

11bb88f1769547b524ddecd95b763989.png


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

7e9d20153b50d16cef3c9220f785e24a.png


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

75f53a75301a94e45e8c3266c1aea84f.png


但是reversed函数通常是反转Python中任何可迭代对象的最佳方法。
与列表的reverse方法(例如numbers.reverse())不同,reversed方法不会改变列表(相反,它返回一个反转项的迭代器)。
与numbers[::-1]切片语法不同,reverse (numbers)不会构建一个全新的列表:它返回的延迟迭代器会在我们进行循环时逆向地检索下一项。此外,reversed(numbers) 比numbers[::-1]更具可读性(如果你以前从未见过这种特殊的切片用法,那么它看起来会很奇怪)。
如果我们结合了reversed 和 zip函数的非复制特性,我们就可以重写palindromic函数(来自上面的enumerate),而不需要占用任何额外的内存(这里不会复制列表):

977c0a8183b22c2f61fd6ccc12e5f5a4.png

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

11bb88f1769547b524ddecd95b763989.png


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

6f4785e5b999f09dd673ff902774aeff.png


如果你对生成器表达式感兴趣,我在我的“可理解的推导式”演讲(以及我3小时的关于“推导式和生成器表达式“的教程)中讨论了它们。min 和 max
min和max函数实现了你所期望的功能:它们会为你返回一个迭代器中的最小和最大项。

c1d096b4df3f63dd3d2426f5cc0c8395.png


min和max函数使用<操作符来比较传给它们的项。因此,所有的值都要是可排序的,并且彼此之间是可比较的(幸运的是,Python中的许多对象是可排序的)。
min和max函数还可以接受一个key函数,允许你自定义特定对象的“最小”和“最大值”的真正含义。sorted
sorted函数接受任何可迭代的对象,并以排序后的顺序返回该可迭代对象中所有值的一个新列表。

49bc0a71ab5f950b2a87979a8e18abd7.png


与min和max类似,sorted函数使用<操作符来比较传给它的项,因此,所有传给它的值都需要是可排序的。
sorted函数还允许通过一个key函数来自定义排序过程(就像min和max)。
顺便说一下,如果你对sorted和list.sort方法的比较感兴趣的话,Florian Dahlitz写了一篇文章来比较这两种方法。any 和 all
any和all函数可以与生成器表达式配对,以确定一个可迭代对象中的任意项和所有项是否与给定条件相匹配。
我们前面的palindromic函数会检查所有项是否与它们的反转序列中的对应项相等(第一个值是否等于最后一个值,第二个值是否等于倒数第二个值,等等)。
我们可以使用all函数像这样来重写palindromic函数:

1d854c891cf3eeada0c562d156ed55e7.png


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

d881989f64a8028de5d135e8104a26c9.png


如果any和all函数对你来说是新的,那么你可能想阅读我关于它们的文章:《在Python中检查所有项是否与一个条件相匹配》。
来源 : https://treyhunner.com/2019/05/python-builtins-worth-learning/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值