加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 移动互联 > 评测 > 正文

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

发布时间:2019-06-22 02:44:30 所属栏目:评测 来源:七月在线
导读:副标题#e# Python,是一个设计优美的解释型高级语言,它提供了很多能让程序员感到舒适的功能特性。 但有的时候,Python一些特性导致的输出结果,对于初学者就很难理解了。 一个解析51项堪称是秘密的Python特性项目,在GitHub上彻底火了。 英文原版已经拿到

然后将字典 some_dict 键 i (刚刚分配的) 的值设为该字符。本例中循环的展开可以简化为:

  1. >>> i, some_dict[i] = (0, 'w') 
  2. >>> i, some_dict[i] = (1, 't') 
  3. >>> i, some_dict[i] = (2, 'f') 
  4. >>> some_dict 

执行时机差异

1.

  1. array = [1, 8, 15] 
  2. g = (x for x in array if array.count(x) > 0) 
  3. array = [2, 8, 22] 
  4.  
  5. Output: 
  6.  
  7. >>> print(list(g)) 
  8. [8] 

2.

  1. array_1 = [1,2,3,4] 
  2. g1 = (x for x in array_1) 
  3. array_1 = [1,2,3,4,5] 
  4.  
  5. array_2 = [1,2,3,4] 
  6. g2 = (x for x in array_2) 
  7. array_2[:] = [1,2,3,4,5] 
  8.  
  9. Output: 
  10.  
  11. >>> print(list(g1)) 
  12. [1,2,3,4] 
  13.  
  14. >>> print(list(g2)) 
  15. [1,2,3,4,5] 

说明:

在生成器表达式中, in 子句在声明时执行, 而条件子句则是在运行时执行。

所以在运行前, array 已经被重新赋值为 [2, 8, 22], 因此对于之前的 1, 8 和 15, 只有 count(8) 的结果是大于 0 的, 所以生成器只会生成 8。

第二部分中 g1 和 g2 的输出差异则是由于变量 array_1 和 array_2 被重新赋值的方式导致的。

在第一种情况下, array_1 被绑定到新对象 [1,2,3,4,5], 因为 in 子句是在声明时被执行的,所以它仍然引用旧对象 [1,2,3,4](并没有被销毁)。

在第二种情况下, 对 array_2 的切片赋值将相同的旧对象 [1,2,3,4] 原地更新为 [1,2,3,4,5]。

因此 g2 和 array_2 仍然引用同一个对象(这个对象现在已经更新为 [1,2,3,4,5])。

本文内容来自中文版项目,项目全文2万多字,以及海量代码。

因为篇幅原因,小七就只为大家展示这6个案例了,更多案例大家可以在项目中查看。

项目作者:Satwik Kansal

英文版项目名称:wtfpython

中文版作者:慕晨

中文项目名称:wtfpython-cn

因为平台规定,无法放链接。大家可以自行搜索。

【编辑推荐】

  1. 微软为 Java 开发者推出 VSCode 安装程序
  2. 谷歌研究人员成功开发了用于自拍摄像头的防脸部失真算法
  3. 2019开发者调查报告:Java最流行,Go最有前途
  4. FB加密货币引发全球担忧 美议员要求暂停开发产品接受听证
  5. Oracle 发布基于 VS Code 的开发者工具,轻松使用 Oracle 数据库
【责任编辑:张燕妮 TEL:(010)68476606】
点赞 0

(编辑:常州站长网)

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

热点阅读