python内置函数和内置方法的区别,以下哪个不是python语言的内置函数
python视频教程栏目带大家认识 Python 内置函数。
在Python Cat的上一篇文章中,我们对比了两种创建列表的方法,即文字用法[]和内置类型用法list(),然后分析了它们在运行速度上的差异。
在分析list()为什么比较慢的时候,文章说需要经过两个步骤:名称查找和函数调用,所以这就引出了一个新的问题:list() 不是内置类型么,为什么它不能直接就调用创建列表的逻辑呢?也就是说,为什么解释器必须经过名称查找,才能“认识”到该做什么呢?.
其实原因很简单:内置函数/内置类型的名字并不是关键字,它们只是解释器内置的一个方便函数,方便开发者开箱即用。
PS:内置函数和内置类型类似,但是list()其实是内置类型而不是内置函数。我对这两个容易混淆的概念做了分析。请检查这篇文章。为了便于理解和表达,以下统称为内置函数。
1、内置函数的查找优先级最低
内置函数的名称并不属于关键字,它们是可以被重新赋值的。例如,下面的例子:
#调用内置函数列表(range (3))正常#结果:[0,1,2]#定义任意函数,然后赋给listdef test (n) 3360。
print(Hello World!)
列表=测试
List(range(3)) #结果:Hello World!复制代码
在这个例子中,我们将自定义测试分配给了列表,并且程序没有报告错误。这个例子甚至可以改为直接定义一个同名的新函数,即 def list(): …。
这说明list不是Python限制的关键字/保留字。
查看官方文档,可以发现Python 3.9有35个关键词,具体如下:
如果我们把上面例子的测试赋给任何一个关键字,比如‘pass=test’,我们会报告一个错误:SyntaxError:无效语法。
从这一点来看,我们可以看到内置函数并不是万能的:它们的名称并不像关键字那般稳固不变,虽然它们处在系统内置作用域里,但是却可以被用户局部作用域的对象所轻松拦截掉!.
因为解释器是按照“局部作用域-全局作用域-内置作用域”的顺序查找名字的,所以内置函数实际上是优先级最低的。
对于新手来说,有一定的可能性会发生意想不到的事情(内置函数69个,很难全部记住)。
那么,为什么 Python 不把所有内置函数的名称都设为不可复写的关键字呢?
一方面,它想控制关键词的数量;另一方面,它可能希望留给用户更多的自由。内置函数只是解释器的推荐实现。开发者可以根据需要实现与内置函数同名的函数。
然而,这种情况很少见,开发人员通常用不同的名称定义函数。以Python标准库为例。ast模块有literal_eval()函数(基准eval()的内置函数),pprint模块有pprint()函数(基准print()的内置函数),itertools模块有zip_longest()函数(基准zip()的内置函数
00-1010因为内置函数的名字不是保留关键字,而且是在名字查找的最后一个顺序,有可能内置函数不是最快的。
上一篇文章展示了[]比list()快2~3倍的事实。其实这个可以扩展到str()、tuple()、set()、dict()等内置类型,都比内置类型用法略快。
对于这些内置类型,当我们调用xxx()时,可以简单理解为我们在实例化类。在面向对象的语言中,类在被使用之前被实例化是很正常的。
然而,这种做法有时似乎很麻烦。为了方便使用,Python 给一些常用的内置类型提供了字面量表示法,也就是""、[]、()、{} 等等,表示字符串、列表、元组和字典等数据类型。
来源:docs.python.org/3/reference…
一般来说,所有的编程语言都必须有一些文字表示,但基本上仅限于数值型、字符串型、布尔型、null等基本类型。
Python还添加了几种数据结构类型的文字,因此更加方便,这也解释了为什么内置的
函数可能不是最快的。
一般而言,同样的完备功能,内置函数总是比我们自定义的函数要快,因为解释器可以做一些底层的优化,例如 len() 内置函数肯定比用户定义的 x.len() 函数快。
有些人据此形成了“内置函数总是更快”的认识误区。
解释器内置函数相对于用户定义函数,前者接近于走后门;而字面量表示法相对于内置函数,前者是在走更快的后门。
也就是说,在有字面量表示法的情况下,某些内置函数/内置类型并不是最快的!
小结
诚然,Python 本身并不是万能的,那它的任何语法构成部分(内置函数/类型),就更不是万能的了。但是,一般我们会认为内置函数/类型总归是“高人一等”的,是受到诸多特殊优待的,显得像是“万能的”。本文从“list() 竟然会败给 []”破题,从两个角度揭示了内置函数其实存在着某种不足:内置函数的名称并不是关键字,而内置作用域位于名称查找的最低优先级,因此在调用时,某些内置函数/类型的执行速度就明显慢于它们对应的字面量表示法。
本文对上一个“Python为什么”话题做了延展讨论,一方面充实了前面的内容,另一方面,也有助于大家理解 Python 的几个基础概念及其实现。
如果你喜欢本文,请点赞支持下吧!另外,我还写了 20+ 篇类似的话题,请关注Python猫
查看,并在 Github 上给我一颗小星星吧~~
相关免费学习推荐:python视频教程以上就是了解为什么说 Python 内置函数并不是万能的?的详细内容,更多请关注盛行IT软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。