3.13 创造 “新语法” 的黑科技¶
通常我们遍历一个元素为 5-10 的数组,会这么写
>>> for i in range(5,11):
... print(i)
...
5
6
7
8
9
10
写法虽然简单,但总有一种不够直观的样子。
今天介绍一个黑科技方法,可以让这种写法更加直观,不够请谨慎使用,因为这个方法有点 “逆天”,会让人误以为是 Python 又出了什么新语法。
最后的效果是这样子的。
>>> 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__
定义的是到
实例左侧遇到|
的行为