你的位置:欧宝app官方(中国)有限公司 > 关于我们 > 博鱼官网登录入口 对于 Python,一些不得不吐槽的“劝诱行径”

博鱼官网登录入口 对于 Python,一些不得不吐槽的“劝诱行径”

关于我们

选录:跟着大数据与人工智能时期的到来,Python 比年来颇受才智员嗜好,在 TIOBE 编程话语名次榜中也稳居第一。但这并不证明 Python 毫无流毒,本文作家就将清点一些 Python 的“劝诱性为”。

详情

博鱼官网登录入口 对于 Python,一些不得不吐槽的“劝诱行径”

选录:跟着大数据与人工智能时期的到来,Python 比年来颇受才智员嗜好,在 TIOBE 编程话语名次榜中也稳居第一。但这并不证明 Python 毫无流毒,本文作家就将清点一些 Python 的“劝诱性为”。

原文市欢:https://medium.com/geekculture/why-python-still-is-a-mess-1f7bf5bca281

作 者 |Ari Joury

译者| 弯月

出品 | CSDN(ID:CSDNnews)

永久以来,Python一直自重是最稳当生手才智员的话语之一。话虽没错,但这并不虞味着编程生手不会对Python的一些行径感到困惑。

举个例子,动态类型。你无需单独编写一排代码来界说变量的类型,Python大要自行分裂,乍一看之下,这似乎很神奇。嗅觉这么编程速率更快。

相关词,就因为少了一排变量界说,通盘形貌在运行放弃之前就有可能崩溃。

说句平允话,许多其他编程话语也使用动态类型。但对于Python而言,这只是一系列恶梦的运行。

隐式的变量声明会影响阅读代码

几年前,我想在共事编写的一个软件的基础之上,进行二次竖立。我走漏该软件的基本思惟,我的共事以致写了一篇论文手脚该软件的文档。

然则,我仍然需要阅读数千行 Python 代码,才能搞清爽各个部分在干什么,以及我不错将新功能放到那边。相关词,就在这个历程中,我遭受了很大的问题……

纵观通盘代码库,变量声明到处都是。为了搞清爽每个变量的用途,我不得不搜索通盘文献,以致是通盘形貌。

此外,还有各式各类的复杂情况,比如函数的某个参数的名字和调用该函数时使用的变量全都不同,或者一个变量与某个类精致结合,而该类又和另一个类中的某个变量交汇在一路……诸如斯类的事情雨后春笋。

许多人都有类似的嗅觉,有人就曾暗示显式变量声明优于隐式(参考市欢:https://peps.python.org/pep-0020/)。然则,在Python中隐式变量声明满坑满谷,尤其是在大型形貌中。

无处不在的可变类型,以致在函数中

在 Python 中,界说函数的时候不错指定可选参数,即不需要明确指定的参数。如下所示:

通过这个通俗的示例不错看出,在调用函数时,不管指定一个参数如故两个参数都不错:

之是以会出现这种表象,是因为抒发式b=0界说了b是一个整数,而整数是不可变的。再望望底下这个例子:

根据报道,美洲联赛目前还没有正式命名,但届时会有来自于北美、巴西和拉丁美洲的10支队伍参加,不过,这个数字可能会存在变动。很多队伍已经公开宣布,他们向拳头游戏递交了申请,包括TSM、100T、EG和V1战队,但有些队伍则是进行私下申请,并没有公开消息。

首先要说的是,标准冰吞无法让你打高层或者作为冲层BD,但是成型快,不挑装备属性,不挑怪物词缀,操作简单手感顺滑和适用范围广泛(低层割草,刷悬赏,带新,刷幻化等都能用),使的这个BD持续多个赛季成为主流工具人。

发现问题了吗?再践诺一次会怎样样?

因为这里的list还是存在,即["foo"],而Python会连续向这个列表添加新东西。这是因为列表与整数不同,是可变类型。

我不禁想起一句话:“疯子就是不停近似吞并件事,却期待不同的成果。”(经验证,这句话不是爱因斯坦说的)。我想说,Python + 可选参数 + 可变对象 = 疯子。

类变量并不安全

如若你以为上述问题仅限于可变对象手脚可选参数的时候,那你就大错特错了。

确信你也使用Python编写面向对象的代码,在Python代码中类无处不在。而类最实用的特点之一即是:袭取。

通俗来说,如若父类具有某些属性,子类就不错袭取这些属性。如下所示:

驻扎,这段代码写得并不好,关于我们不要复制到履行的形貌中。关键在于,子类袭取了 x = 1,因此咱们不错得到子类的这个属性,得到的成果与父类调换。

如若咱们修改某个子类的x属性,那么理当说变化的唯有这个子类。就好像孩子染发不可能改造父母亲或兄弟姐妹的发色。代码如下:

如若这时父母染发,孩子的发色会变吗?不会变,对分歧?

出现这个成果是因为Python的步伐确认端正(http://python-history.blogspot.com/2010/06/method-resolution-order.html)。通俗来说,只消莫得另行证明,子类就会袭取父类领有的一切。也就是说,在Python的宇宙里,如若你不提前抗议,那么你姆妈在染头发的时候,会顺带连你的头发一路染了。

反标的的作用域

我个人还是因为这个问题屡次栽跟头。

在Python中,函数里面界说的变量无法在函数外部使用,这是因为超出了作用域:

这部分全都适合直观,我栽跟头也不是因为这部分代码。

然则反过来呢?我的真理是,如若我在函数外部界说一个变量,然后在函数里面援用它呢?

这就很奇怪了,不是吗?咱们生涯在一个有树的宇宙里,固然往常咱们住在屋子里,但确定也走漏树长什么形状,对分歧?(树是 x,屋子是 add_5,咱们是 5……)

有好屡次,我在某个类中调用另一个类中界说的函数,就遭受了失误。我花了很长一段本领才找到问题的根源。

其背后的基本思惟是,函数里面的 x 与外部的 x 是不同的,是以你不成在外部调用它。

红运的是,这个问题有一个通俗的处分决策,即在 x 之前加一个global,让x形周详局变量!

是以说,如若你以为作用域的蓄意只是是保护函数里面的变量不被外部滋扰,那就大错特错了。在Python中,局部作用域也无法走访外部。

在迭代的历程中修改列表

请看如下代码:

这个轮回出错,是因为轮回在迭代的历程中不停删除列表中的元素。因此,列表不停裁减,轮回不可能到达第10个元素,因为它不存在了!

有一种处分步伐是,为你想删除的总共元素长入分拨一个值,然后在轮回放弃后删除它们。

此外,似乎还有一种更好的处分方式:

只需要一排代码!

请驻扎,在上头的示例中,咱们使用了 Python 的列表推导式来调用列表。

列表推导式指的是方括号([])中的抒发式,一般都是轮回的缩写格式。列表推导式连续比老例轮回更快,因此终点稳当处理大型数据集。

在这个示例中,咱们添加了一个 if 子句来告诉列表推导式:不应包含可被 3 整除的数字。

这个问题与前边的几个不同,我不以为这是Python的劝诱行径,相悖我以为这种处理很贤惠,尽管入门者确认起来会有些费事。

转头

履行上,咱们对Python的发火不啻是编写代码的苍凉,别忘了,以前Python的践诺速率终点慢,比大大宗其他话语慢 2~10 倍。

现时情况还是好许多了。举例,现时Numpy 包大要终点快速地处理列表、矩阵等。

Python的多线程处理也变得愈加容易了。你不错使用研讨机上的多个内核,我曾在 20 个内核上运行进度,为我省俭了数周的研讨本领。

此外,在当年几年中,跟着机器学习的昂然发展,Python 也发达出了进一步的发展空间。Pytorch 和 Tensorflow 等包的出现股东了Python的采用,而其他话语也正在致力于中。

固然,多年来Python在不停逾越,但这并不成保证Python将来的发展会一帆风顺。Python话语的学习并莫得那么通俗,请多加防御。

☞ AI 编程“神器”国产化!华为耗时 8 个月,这个能用汉文生成代码的模子出身了

☞ 用户吐槽不成给安卓手机发视频,库克:“给你姆妈买台 iPhone !”

☞ 与智能汽车再会恨晚的SOA到底是什么? 博鱼官网登录入口

发布于:北京市声明:该文观点仅代表作家自己,搜狐号系信息发布平台,搜狐仅提供信息存储空间作事。

官网: www.carecaprice.com

邮箱: f59522@qq.com

地址: 关于我们2289号

Powered by 欧宝app官方(中国)有限公司 RSS地图 HTML地图


欧宝app官方(中国)有限公司-博鱼官网登录入口 对于 Python,一些不得不吐槽的“劝诱行径”