IT资讯
当前位置:雪球网 > IT资讯 >  大数据

了解为什么说 Python 内置函数并不是万能的?

咪乐|直播|官方版下载 延伸阅读:不一样的爱好?日本情色女王一年为200遗体化妆2015-07-23来源:凤凰娱乐凤凰娱乐讯据台湾媒体报道,日本女星坛蜜拥有E级傲人美胸,留着一头飘逸的黑色长发,更增添妖艳气质,被封为“情色女王”,2013年演出《半泽直树》情妇一角,人气更向上窜升。

2021-10-24 00:54:24 木庄网络博客 编辑:米雪 浏览数:3雪球网

本文摘自php中文网,作者coldplay.xixi,侵删。python视频教程栏目带大家认识 Python 内置函数。在Python猫的上一篇文章中,我们对比了两种创建列表的方法,即字面量用法 [] 与内置类型用法 l...

本文摘自php中文网,作者coldplay.xixi,侵删。

python视频教程栏目带大家认识 Python 内置函数。

Python猫的上一篇文章中,我们对比了两种创建列表的方法,即字面量用法 [] 与内置类型用法 list(),进而分析出它们在运行速度上的差异。

在分析为什么 list() 会更慢的时候,文中说到它需要经过名称查找与函数调用两个步骤,那么,这就引出了一个新的问题:list() 不是内置类型么,为什么它不能直接就调用创建列表的逻辑呢?也就是说,为什么解释器必须经过名称查找,才能“认识”到该做什么呢?

其实原因很简单:内置函数/内置类型的名称并不是关键字,它们只是解释器内置的一种便捷功能,方便开发者开箱即用而已。

PS:内置函数 built-in function 和内置类型 built-in type 很相似,但 list() 实际是一种内置类型而不是内置函数。我曾对这两种易混淆的概念做过辨析,请查看这篇文章。为了方便理解与表述,以下统称为内置函数。

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

比如下面这个例子:

1

2

3

4

# 正常调用内置函数list(range(3))  # 结果:[0, 1, 2]# 定义任意函数,然后赋值给 listdef test(n):

    print("Hello World!")

list = test

list(range(3)) # 结果:Hello World!代码

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

这说明了 list 并不是 Python 限定的关键字/保留字。

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

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

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

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

对于新手来说,这有一定的可能会发生意想不到的情况(内置函数有 69 个,要全记住是有难度的)。

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

一方面原因是它想控制关键字的数量,另一方面可能是想留给用户更多的自由。内置函数只是解释器的推荐实现而已,开发者可以根据需要,实现出与内置函数同名的函数。

不过,这样的场景极少,而且开发者一般会定义成不同名的函数,以 Python 标准库为例,ast模块有 literal_eval() 函数(对标 eval() 内置函数)、pprint 模块有 pprint() 函数(对标 print() 内置函数)、以及itertools模块有 zip_longest() 函数(对标 zip() 内置函数)……

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

上篇文章展示了 [] 比 list() 快 2~3 倍的事实,其实这还可以推广到 str()、tuple()、set()、dict() 等等内置类型中,都是字面量用法稍稍快于内置类型用法。

对于这些内置类型,当我们调用 xxx() 时,可以简单理解成正在做类的实例化。在面向对象语言中,类先实例化再使用,这是再正常不过的。

分享到:

版权与免责声明:

凡未注明"稿件来源"的内容均为转载稿,本网转载出于传递更多信息的目的;如转载稿涉及版权问题,请作者联系我们,同时对于用户评论等信息,本网并不意味着赞同其观点或证实其内容的真实性;


本文地址:http://www-bud2013-com.therighthue.com/news/2021/10/11/338769222.html

转载本站原创文章请注明来源:雪球网

行业聚焦

开放世界沙盒游戏《深海迷航》上线 Steam 中国

IT之家 10 月 18 日消息,开放世界沙盒游戏《深海迷航》现已上线蒸汽平台。游戏目前限时八折优惠,售价 79.2 元,截止到 10 月 31 日。《深海迷航...[详细]

倒计时 1 天!2021 金万维全国伙伴大会邀您与 1000 + 伙伴一起打开数字化生态之门

如今,各行业数字化转型势头正劲,信创产业、AI智能、大数据等领域发展如何如荼。对管理软件伙伴来说,信创产业有哪些发展机遇?企业数字化转型应该从哪些方面下手?数字...[详细]

PCIe 6.0 标准进入最后流程:速度再次翻倍,x16 通道可达 128 GB/s

IT之家 10 月 7 日消息 根据外媒 TomsHardware 消息,PCI-SIG 组织本周宣布,PCIe 6.0 标准规范已经进入最后的 Fi...[详细]

南京首条全自动驾驶地铁 7 号线列车亮相:草绿色车身,设计时速 80 公里

IT之家 10 月 2 日消息 据智慧 7 号线官方发布,南京首条全自动地铁来了。南京地铁 7 号线于 2017 年 11 月 29 日正式开工,是南...[详细]

索尼将停止支持 PS3/PSV 使用信用卡/PayPal 付款购买

IT之家 10 月 6 日消息 索尼今日发布通知,决定自 2021 年 10 月 27 日起,停止支持用户使用信用卡/PayPal 方式购买 PS3、...[详细]

活动互动

更多

突破 100 种,微软翻译新增对 12 种语言/方言支持,包括藏语、维吾尔语...

 

IT之家 10 月 12 日消息,微软翻译今天宣布支持 12 种新的语言和方言。有了这项支持,微软翻译现在总共支持 10...[详细]

诺基亚 G300 正式发布:骁龙 480 5G SoC+4470mAh 电池

 

IT之家 10 月 13 日消息,据 MySmartPrice 报道,诺基亚已在美国市场正式推出新款 G 系列智能手机诺...[详细]

特斯拉参加天猫双 11:发限量款玻璃酒瓶,充电桩 24 期免息

 

IT之家 10 月 21 日消息,特拉斯也参加天猫双 11 了。10 月 21 日,特斯拉天猫官方旗舰店上架 Tesla...[详细]

华硕 TUF GAMING B560

 

IT之家 10 月 15 日消息,华硕于 2021 年 7 月推出了一系列鬼灭之刃联名产品,包含无线路由器、主机、显卡、...[详细]

又鸽了,三星 Galaxy S21 系列 One UI 4 内测推迟至 10 月 18 日

 

IT之家 10 月 14 日消息,三星盖乐世社区近日宣布,Galaxy S21 系列 One UI 4 内测预计将于 1...[详细]

一周排行每月关注
百度