加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

Python的51个“奥秘”被曝光,GitHub获2万星

发布时间:2019-06-22 19:10:28 所属栏目:移动互联 来源:七月在线
导读:Python,是一个计划美妙的表明型高级说话,它提供了许多能让措施员感想舒服的成果特征。 但有的时辰,Python一些特征导致的输出功效,对付初学者就很难领略了。 一个理会51项堪称是奥秘的Python特征项目,在GitHub上彻底火了。 英文原版已经拿到了近15000
副问题[/!--empirenews.page--]

 Python的51个“奥秘”被曝光,GitHub获2万星

Python,是一个计划美妙的表明型高级说话,它提供了许多能让措施员感想舒服的成果特征。

但有的时辰,Python一些特征导致的输出功效,对付初学者就很难领略了。

一个理会51项堪称是“奥秘”的Python特征项目,在GitHub上彻底火了。

英文原版已经拿到了近15000星,中文翻译版也得到了7500+星。

Python的51个“奥秘”被曝光,GitHub获2万星 Python的51个“奥秘”被曝光,GitHub获2万星

项目中的部门内容,大概你传闻过,但依然也许会透露一些你所不知道的Python风趣特征。

我认为这是进修编程说话内部道理的好机遇,并且我信托你也会从中得到爱好!

假如你是一位履历较量富厚的Python措施员,你可以试试可否一次就找到正确谜底。

大概你对个中的一些例子较量认识,那这些案例能唤起你昔时踩坑时的甜美回想。

这个项目标中文版全文约莫2万字,干货多的将近溢出来了,各人可以先看一下目次。

Python的51个“奥秘”被曝光,GitHub获2万星

示例布局

全部示例的布局都如下所示:

> 一个精选的问题

# 筹备代码.

# 开释邪术...

Output (Python version):

>>> 触发语句

出乎料想的输出功效

(可选): 对不测输出功效的简短描写。

声名:

扼要声名产生了什么以及为什么会产生。

若有须要,举例声名

Output:

>>>触发语句#一些让邪术变得轻易领略的例子

#一些正常的输入

留意:全部的示例都在Python3.5.2版本的交互表明器上测试过,假如不出格声名应该合用于全部Python版本。

用法

我小我私人提议,最好依次阅读下面的示例,并细心阅读配置例子最开始的代码。

阅读输出功效

  • 确认功效是否如你所料.

  • 确认你是否知道这背后的道理

示例

玄妙的字符串

1.

  1. >>> a = "some_string" 
  2. >>> id(a) 
  3. 140420665652016 
  4. >>> id("some" + "_" + "string") # 留意两个的id值是沟通的. 
  5. 140420665652016 

2.

  1. >>> a = "wtf" 
  2. >>> b = "wtf" 
  3. >>> a is b 
  4. True 
  5.  
  6. >>> a = "wtf!" 
  7. >>> b = "wtf!" 
  8. >>> a is b 
  9. False 
  10.  
  11. >>> a, b = "wtf!", "wtf!" 
  12. >>> a is b 
  13. True 

3.

  1. >>> 'a' * 20 is 'aaaaaaaaaaaaaaaaaaaa' 
  2. True 
  3. >>> 'a' * 21 is 'aaaaaaaaaaaaaaaaaaaaa' 
  4. False 

声名:

这些举动是因为 Cpython 在编译优化时,某些环境下会实行行使已经存在的不行变工具,而不是每次都建设一个新工具。(这种举动被称作字符串的驻留[string interning])

产生驻留之后,很多变量也许指向内存中的沟通字符串工具。(从而节减内存)

在上面的代码中,字符串是隐式驻留的。何时产生隐式驻留则取决于详细的实现。这里有一些要领可以用来揣摩字符串是否会被驻留:

全部长度为 0 和长度为 1 的字符串都被驻留。

字符串在编译时被实现。('wtf' 将被驻留, 可是 ''.join(['w', 't', 'f'] 将不会被驻留)

字符串中只包括字母,数字或下划线时将会驻留。以是 'wtf!' 因为包括!而未被驻留。可以在这里找CPython对此法则的实现。

Python的51个“奥秘”被曝光,GitHub获2万星

当在统一行将 a 和 b 的值配置为 "wtf!" 的时辰, Python 表明器会建设一个新工具, 然后同时引用第二个变量。

假如你在差异的行长举办赋值操纵, 它就不会“知道”已经有一个 wtf! 工具 (由于 "wtf!" 不是凭证上面提到的方法被隐式驻留的)。

它是一种编译器优化,出格合用于交互式情形。

常量折叠(constant folding) 是 Python 中的一种窥孔优化(peephole optimization) 技能。

这意味着在编译时表达式 'a'*20 会被替代为 'aaaaaaaaaaaaaaaaaaaa' 以镌汰运行时的时钟周期。

只有长度小于 20 的字符串才会产生常量折叠。(为啥? 想象一下因为表达式'a'*10**10 而天生的 .pyc 文件的巨细)相干的源码:

https://github.com/python/cpython/blob/3.6/Python/peephole.c#L288

是时辰来点蛋糕了!

1.

  1. some_dict = {} 
  2. some_dict[5.5] = "Ruby" 
  3. some_dict[5.0] = "JavaScript" 
  4. some_dict[5] = "Python" 
  5.  
  6. Output: 
  7.  
  8. >>> some_dict[5.5] 
  9. "Ruby" 
  10. >>> some_dict[5.0] 
  11. "Python" 
  12. >>> some_dict[5] 
  13. "Python" 
  14.  
  15. "Python" 消除了 "JavaScript" 的存在? 

声名:

Python 字典通过搜查键值是否相称和较量哈希值来确定两个键是否沟通。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读