30。创造新语法的黑科技
通常我们遍历一个元素为 5-10 的数组,会这么写 >>> for i in range(5,11): ... print(i) ... 5 6 7 8 9 10
今天介绍一个黑科技方法,可以让这种写法更加直观,请谨慎使用。 >>> for i in 5|到|10: ... print(i) ... 5 6 7 8 9
|到| 应该分为 | 、 到 、 | 这三个部分。
第一和第三的 | 是同个意思,它就是一个普通的运算符,通常我们使用 or 关键字来替代它,导致很多人对这个符号比较陌生。
这边是一个简单的例子,当两边 | 两边有一边为 True 就会返回 True >>> if True | False: ... print("ok") ... ok >>> >>> if False | False: ... print("ok") ... >>>
基本上所有的运算符都可以通过魔法方法来重新定义运算符的逻辑,这个过程叫做运算符重载, | 也不例外。
控制 | 的魔法方法是 __or__ 和 __xor__
讲完了第一个和第三个字符,现在说说第二个字符 到
到 实际上是一个类的实例,上面为了神秘,我没有事先给出完整代码
定义一个 Magic 的类,用于改变 range 的 | 方法>>> class Magic(object): ... def __init__(self, func): ... self.func = func ... def __or__(self, other): ... return self.func(other) ... def __ror__(self, other): ... self.func = partial(self.func, other) ... return self ... >>> >>> 到 = Magic(range)
总结一下,这三者如何起作用的? 到 是 Magic 类的一个实例__or__ 定义的是 到 实例右侧遇到 | 的行为__xor__ 定义的是 到 实例左侧遇到 | 的行为