3.13 创造 “新语法” 的黑科技 =========================== .. image:: http://image.iswbm.com/20200804124133.png 通常我们遍历一个元素为 5-10 的数组,会这么写 .. code:: python >>> for i in range(5,11): ... print(i) ... 5 6 7 8 9 10 写法虽然简单,但总有一种不够直观的样子。 今天介绍一个黑科技方法,可以让这种写法更加直观,不够请谨慎使用,因为这个方法有点 “逆天”,会让人误以为是 Python 又出了什么新语法。 最后的效果是这样子的。 .. code:: python >>> for i in 5|到|10: ... print(i) ... 5 6 7 8 9 ``|到|`` 很容易让人误以为是什么新的语法? 其实不是的,\ ``|到|`` 应该分为 ``|`` 、\ ``到``\ 、\ ``|`` 这三个部分,下面我们一一讲解。 第一和第三的 ``|`` 是同个意思,它就是一个普通的运算符,通常我们使用 ``or`` 关键字来替代它,导致很多人对这个符号比较陌生。 这边是一个简单的例子,当两边 ``|`` 两边有一边为 True 就会返回 True .. code::  python >>> if True | False: ... print("ok") ... ok >>> >>> if False | False: ... print("ok") ... >>> 基本上所有的运算符都可以通过魔法方法来重新定义运算符的逻辑,这个过程叫做运算符重载, ``|`` 也不例外。 控制 ``|`` 的魔法方法是 ``__or__`` 和 ``__xor__`` 讲完了第一个和第三个字符,现在说说第二个字符 ``到`` ``到`` 实际上是一个类的实例,上面为了神秘,我没有事先给出完整代码 定义一个 Magic 的类,用于改变 range 的 ``|`` 方法 .. code:: python >>> 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__`` 定义的是 ``到`` 实例左侧遇到 ``|`` 的行为