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

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

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

那为什么 is 操作的结果为 False 呢? 让我们看看这段代码:

  1. class WTF(object): 
  2. def __init__(self): print("I") 
  3. def __del__(self): print("D") 
  4.  
  5. Output: 
  6.  
  7. >>> WTF() is WTF() 
  8. False 
  9. >>> id(WTF()) == id(WTF()) 
  10. True 

正如你所看到的, 对象销毁的顺序是造成所有不同之处的原因。

为什么?

  1. some_string = "wtf" 
  2. some_dict = {} 
  3. for i, some_dict[i] in enumerate(some_string): 
  4. pass 
  5.  
  6. Output: 
  7.  
  8. >>> some_dict # 创建了索引字典. 
  9. {0: 'w', 1: 't', 2: 'f'} 

说明:

Python 语法 中对 for 的定义是:

  1. for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] 

其中 exprlist 指分配目标. 这意味着对可迭代对象中的每一项都会执行类似 {exprlist} = {next_value} 的操作。

一个有趣的例子说明了这一点:

  1. for i in range(4): 
  2. print(i) 
  3. i = 10 
  4.  
  5. Output: 
  6.  

你可曾觉得这个循环只会运行一次?

说明:

由于循环在Python中工作方式, 赋值语句 i = 10 并不会影响迭代循环, 在每次迭代开始之前, 迭代器(这里指 range(4)) 生成的下一个元素就被解包并赋值给目标列表的变量(这里指 i)了。

在每次迭代中, enumerate(some_string) 函数就生成一个新值 i (计数器增加) 并从 some_string 中获取一个字符。

(编辑:西安站长网)

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

热点阅读