python内置函数和内置方法的区别,以下哪个不是python语言的内置函数

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • python语言基本语句用法总结大全,python语言基本语句用法总结怎么写
  • python语言基本语句用法总结大全,python语言基本语句用法总结怎么写,python语言基本语句用法总结
  • python是一种什么类型的计算机语言,python语言是一种什么类型的编程语言
  • Python的保留字符,python语言中的保留字
  • python的指数e怎么表示,指数函数在python语言中怎么表示
  • python语言合法的变量命名,在python中变量的命名要注意哪些问题
  • python变量命名可以用中文吗,下面哪一个不是python语言合法的变量命名
  • Python分词库,用python语言中文分词第三方库jieba对文件data
  • python中复数类型的实部和虚部都是浮点数,python语言中,复数类型中实数部分和虚数部分
  • 用python语言判断一个数是否为素数,Python判断是不是素数
  • python语句变量命名规则,python语言命名变量规则
  • 简述python语言程序的特点,以下关于python语言技术特点
  • matlab中for循环的用法例子,python语言for循环语句
  • Python主网站,python语言的官方网站
  • 用python开发的软件有哪些,哪些工具可以使用python语言开发软件
  • 留言与评论(共有 条评论)
       
    验证码: