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

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

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

具有沟通值的不行变工具在Python中始终具有沟通的哈希值。

  1. >>> 5 == 5.0 
  2. True 
  3. >>> hash(5) == hash(5.0) 
  4. True 

留意: 具有差异值的工具也也许具有沟通的哈希值(哈希斗嘴)。

当执行 some_dict[5] = "Python" 语句时, 由于Python将 5 和 5.0 辨认为 some_dict 的统一个键, 以是已有值 "JavaScript" 就被 "Python" 包围了。

处处返回!

  1. def some_func(): 
  2. try: 
  3. return 'from_try' 
  4. finally: 
  5. return 'from_finally' 
  6.  
  7. Output: 
  8.  
  9. >>> some_func() 
  10.  
  11. 'from_finally' 

声名:

当在 "try...finally" 语句的 try 中执行 return, break 或 continue 后, finally 子句依然会执行。

函数的返回值由最后执行的 return 语句抉择。

因为 finally 子句必然会执行, 以是 finally 子句中的 return 将始终是最后执行的语句。

本质上,我们都一样

  1. class WTF: 
  2. pass 
  3.  
  4. Output: 
  5.  
  6. >>> WTF() == WTF() # 两个差异的工具应该不相称 
  7.  
  8. False 
  9.  
  10. >>> WTF() is WTF() # 也不沟通 
  11.  
  12. False 
  13.  
  14. >>> hash(WTF()) == hash(WTF()) # 哈希值也应该差异 
  15.  
  16. True 
  17.  
  18. >>> id(WTF()) == id(WTF()) 
  19.  
  20. True 

声名:

当挪用 id 函数时, Python 建设了一个 WTF 类的工具并传给 id 函数。

然后 id 函数获取其id值 (也就是内存地点), 然后扬弃该工具. 该工具就被烧毁了。

当我们持续两次举办这个操纵时, Python会将沟通的内存地点分派给第二个工具。 由于 (在CPython中) id 函数行使工具的内存地点作为工具的id值, 以是两个工具的id值是沟通的。

综上, 工具的id值仅仅在工具的生命周期内独一。在工具被烧毁之后, 或被建设之前, 其他工具可以具有沟通的id值。

那为什么 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 中获取一个字符。

(编辑:湖南网)

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

热点阅读