原标题:注意 Python 内置函数并不是万能的!

万万没想到,list() 竟然会败给 []。你不禁会问“list() 不是内置类型吗?”这就是今天要解开的误会了:内置函数/内置类型只是解释器内置的一种便捷功能,方便开发者开箱即用而已。

内置函数的查找优先级最低

内置函数的名称并不属于关键字,它们是可以被重新赋值的。

举个例子:

在这个例子中,我们将自定义的 test 赋值给了 list,程序并没有报错。这个例子甚至还可以改成直接定义新的同名函数,即"def list(): …"。这说明了 list 并不是 Python 限定的关键字/保留字。

查看官方文档,可以发现 Python3.9 有35个关键字,明细如下:

如果我们将上例的 test 赋值给任意一个关键字,例如"pass=test",就会报错:SyntaxError: invalid syntax。

由此,我们可以从这个角度看出内置函数并不是万能的:它们的名称并不像关键字那般稳固不变,虽然它们处在系统内置作用域里,但是却可以被用户局部作用域的对象所轻松拦截掉!

因为解释器查找名称的顺序是“局部作用域->全局作用域->内置作用域”,因此内置函数其实是处在最低优先级。

那么,为什么 Python 不把所有内置函数的名称都设为不可复写的关键字呢?

一方面原因是它想控制关键字的数量,另一方面可能是想留给用户更多的自由。内置函数只是解释器的推荐实现而已,开发者可以根据需要,实现出与内置函数同名的函数。不过,这样的场景极少,而且开发者一般会定义成不同名的函数,以 Python 标准库为例,ast 模块有literal_eval()函数(对标 eval() 内置函数)、pprint 模块有pprint()函数(对标 print() 内置函数)、以及 itertools 模块有zip_longest()函数(对标 zip() 内置函数)……

内置函数可能不是最快的

由于内置函数的名称并非保留的关键字,以及它处于名称查找的末位顺序,所以内置函数有可能不是最快的。

对比 list() 快 2~3 倍的事实,其实这还可以推广到 str()、tuple()、set()、dict() 等等内置类型中,都是字面量用法稍稍快于内置类型用法。对于这些内置类型,当我们调用 xxx() 时,可以简单理解成正在做类的实例化。在面向对象语言中,类先实例化再使用,这是再正常不过的。

但是,这样的做法有时也显得繁琐。为了方便使用,Python 给一些常用的内置类型提供了字面量表示法,也就是""、[]、()、{} 等等,表示字符串、列表、元组和字典等数据类型。

一般而言,所有编程语言都必须有一些字面量表示,但基本都局限在数字类型、字符串、布尔类型以及 null 之类的基础类型。

Python 中还增加了几种数据结构类型的字面量,所以是更为方便的,同时这也解释了为什么内置函数可能不是最快的。

一般而言,同样的完备功能,内置函数总是比我们自定义的函数要快,因为解释器可以做一些底层的优化,例如len()内置函数肯定比用户定义的 x.len() 函数快。有些人据此形成了“内置函数总是更快”的认识误区。解释器内置函数相对于用户定义函数,前者接近于走后门;而字面量表示法相对于内置函数,前者是在走更快的后门。也就是说,在有字面量表示法的情况下,某些内置函数/内置类型并不是最快的!

毕竟Python 本身并不是万能的,那它的任何语法构成部分(内置函数/类型),就更不是万能的了。

文章部分素材来源:CSDN返回搜狐,查看更多

责任编辑:

python内置函数分类_注意 Python 内置函数并不是万能的!相关推荐

  1. python常用内置函数乘法_每个 Python 高手都应该知道的内置函数

    每个 Python 高手都应该知道的内置函数 Python 将纳入高中教材,大学 VB 将被 Python 取代, 现在你还对 Python 一无所知吗?去年就被国外一机构预测, 2017 年 pyt ...

  2. python的六个类型_介绍Python中6个序列的内置类型

    原标题:介绍Python中6个序列的内置类型 1.Python中6个序列的内置类型分别是什么? Python包含6中内建的序列,即列表.元组.字符串.Unicode字符串.buffer对象和 xran ...

  3. python中append函数解析_对python中的pop函数和append函数详解

    对python中的pop函数和append函数详解 pop()函数 1.描述 pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值. 语法 pop()方法语法: list. ...

  4. pythonexecute函数功能_关于Python函数的5件事

    作者 | Aditya Kousik Cotra 译者 | IT外文选刊是时候编写结构合理的程序了. 函数是复用程序代码的有效方法.使用函数的好处是可以节省空间,而且我们选择的名称也使我们的程序易于阅 ...

  5. python 函数重载_在Python中实现函数重载,60%的人都不会

    connect('123.45.32.18:8080') connect(('123.45.32.18', 8080)) 复制代码 你想在代码里面兼容这两种写法,于是你可能会这样写代码: def co ...

  6. python json数据格式数组内元素递增赋值_利用Python实现JSON格式数据的编码与解码操作...

    导读 JSON (全称:JavaScript Object Notation )是一种轻量级的数据交换格式,所谓的轻量级,是与 XML 数据结构相比而言的,在描述相同的数据下,JSON 所需的字符比X ...

  7. python程序如何执行死刑_「Python基础知识」Python生成器函数

    原标题:「Python基础知识」Python生成器函数 对于程序而言,内存也是很重要的,因为程序中很多数据都是保存在内存中的,如果内存中存储的数据过多,那么系统就会崩溃,这是人们不希望发生的. 可以采 ...

  8. python中的row函数均方_均方位移python(Mean square displacement python)

    均方位移python(Mean square displacement python) 我有一个轨迹文件,模拟20,000帧,每帧之间有5 ps的时间,我想做的是计算二维(x和y轴)的扩散. 但为了计 ...

  9. python quit函数作用_初识Python之基础知识

    安装了Anaconda3以及Jupyter notebook后对Python中的一些基础语法.定义容器,对容器做增删改,定义及调用函数做了学习,并且在notebook中实践敲了代码 数据类型:字符串( ...

  10. python中主函数用法_【Python 1-13】Python手把手教程之——详解函数和函数的使用...

    - 作者 | 弗拉德 来源 | 弗拉德(公众号:fulade_me) 定义函数 下面是一个打印问候语的简单函数,名为greet_user(): def greet_user(): "&quo ...

最新文章

  1. thymeleaf模板的使用(转)
  2. 再说 Spring AOP
  3. 网易云音乐前副总裁教你如何做产品
  4. uboot阅读笔记之cpu工作模式(SVC32)
  5. 705. 设计哈希集合
  6. 用OOP设计以下场景。太阳发出太阳光,照射在墙壁上,在地面形成影子。
  7. java 转化箭头函数_this 指向详细解析(箭头函数)
  8. 计算机启动后需重启才能正常显示,电脑开机老是要重启N次后才能正常
  9. DC游戏《斑鸠》原创赏析[转载]
  10. 定时任务:每隔30分钟执行一次脚本
  11. The fundamentals of millimeter wave radar sensors——毫米波雷达传感器基本原理
  12. EtherCAT主站SOEM源码解析----ecx_siiPDO()
  13. 剖析:谈谈微信小游戏的成功点
  14. 如何在服务里面删除应用(比如说删除掉服务里面的tomcat)?
  15. 如何可以同时登录多个账户:无痕模式的使用
  16. miniUI实现指定行可编辑,其他行仍然只读
  17. rqt_publisher报错/publisher_widget.py“, line 105, in _update_thread_run
  18. 华硕主板驱动在哪里下载?(ROG STRIX B250I)
  19. java 泛型方法 实例化_Java让泛型实例化的方法
  20. 通过小程序和微信社群来构建产品运营体系

热门文章

  1. 第四节:定时器中断及定时器产生PWM(用CubeMX学习STM32)
  2. Linux操作系统中rsync工具常见用法
  3. 正反向数据库及生成设计报告
  4. Vert.x 异步访问数据库 MySQL
  5. 解决vmware虚拟机安装苹果系统Mac OS X 10.10出现“二进制转换不支持用于Mac OS X”的问题-网络教程与技术 -亦是美网络 - 傲游云浏览器 (beta) 4.9.3.100...
  6. C#条件编译,发布多平台和多种选择性的项目
  7. [SAP ABAP开发技术总结]选择屏幕——各种屏幕元素演示
  8. asp编程实例:通过表单创建word的一个例子
  9. 利用webBrowser实现万能打印
  10. AACL2022会议征稿