设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 重新 试卷 创业者
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

小姐姐的Python隐藏技巧合集,推特2400赞,代码可以直接跑(4)

发布时间:2019-10-24 12:45 所属栏目:21 来源:栗子
导读:如果想对比两个节点 (的各种值) ,就用 _eq_ 来重载 == 运算符,用 _lt_ 来重载 运算符,用 _ge_ 来重载 = 。 1classNode: 2Astructtodenotethenodeofabinarytree. 3Itcontainsavalueandpointerstoleftandrightchil

如果想对比两个节点 (的各种值) ,就用 _eq_ 来重载 == 运算符,用 _lt_ 来重载 < 运算符,用 _ge_ 来重载 >= 。

  1.  1class Node: 
  2.  2 """ A struct to denote the node of a binary tree. 
  3.  3 It contains a value and pointers to left and right children. 
  4.  4 """ 
  5.  5 def __init__(self, value, left=None, right=None): 
  6.  6 self.value = value 
  7.  7 self.left = left 
  8.  8 self.right = right 
  9.  9 
  10. 10 def __eq__(self, other): 
  11. 11 return self.value == other.value 
  12. 12 
  13. 13 def __lt__(self, other): 
  14. 14 return self.value < other.value 
  15. 15 
  16. 16 def __ge__(self, other): 
  17. 17 return self.value >= other.value 
  18. 18 
  19. 19 
  20. 20left = Node(4) 
  21. 21root = Node(5, left) 
  22. 22print(left == root) # False 
  23. 23print(left < root) # True 
  24. 24print(left >= root) # False 

想要了解更多魔术方法,请前往:

https://www.tutorialsteacher.com/python/magic-methods-in-python

或者使用官方文档,只是有一点点难读:

https://docs.python.org/3/reference/datamodel.html#special-method-names

这里,还要重点安利几种魔术方法:

一是 _len_ :重载 len() 函数用的。

二是 _str_:重载 str() 函数用的。

三是 _iter_:想让object变成迭代器,就用这个。有了它,还可以在object上调用 next() 函数。

对于像节点这样的类,我们已经知道了它支持的所有属性 (Attributes) :value、left和right,那就可以用 _slots_ 来表示这些值。这样有助于提升性能,节省内存。

  1. 1class Node: 
  2. 2 """ A struct to denote the node of a binary tree. 
  3. 3 It contains a value and pointers to left and right children. 
  4. 4 """ 
  5. 5 __slots__ = ('value', 'left', 'right') 
  6. 6 def __init__(self, value, left=None, right=None): 
  7. 7 self.value = value 
  8. 8 self.left = left 
  9. 9 self.right = right 

想要全面了解 _slots_ 的优点和缺点,可以看看Aaron Hall的精彩回答:

https://stackoverflow.com/a/28059785/5029595

4、局部命名空间,对象的属性

locals() 函数,返回的是一个字典 (Dictionary) ,它包含了局部命名空间 (Local Namespace) 里定义的变量。l

  1. 1class Model1: 
  2.  2 def __init__(self, hidden_size=100, num_layers=3, learning_rate=3e-4): 
  3.  3 print(locals()) 
  4.  4 self.hidden_size = hidden_size 
  5.  5 self.num_layers = num_layers 
  6.  6 self.learning_rate = learning_rate 
  7.  7 
  8.  8model1 = Model1() 
  9.  9 
  10. 10==> {'learning_rate': 0.0003, 'num_layers': 3, 'hidden_size': 100, 'self': <__main__.Model1 object at 0x1069b1470>} 

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读