从 python 中的模块导入运算符的语法

Syntax to import an operator from a module in python

我正在使用 this library,它(非常合理,因为它是从另一种语言的习语翻译过来的)大量使用运算符重定义。

用法以 from parsec import * 开头,通常我尽量避免,而是保留我的命名空间。更像是 import parsec as p 然后显式地使用子函数和每个运算符。

这适用于某些函数,例如 p.many1()p.spaces()p.regex()

然而,这也让我尝试导入命名空间运算符,这看起来更不符合 Python 风格。

例如按位>><<被重新定义。 .

不仅尝试使用名称空间来调用这些运算符看起来也不符合 Python 风格,我什至不清楚该怎么做:p.>>?如您所见,这是一个语法错误:

>>> import parsec as p
>>> p.>> p.many()
  File "<stdin>", line 1
    p.>>
       ^
SyntaxError: invalid syntax

这让我决定要隐式导入运算符,即调用 >> 而不使用名称空间,但将非运算符导入 p 名称空间中。

编辑更新

明确地说,我的问题是:

How can I import the functions like many1() with a namespace as p.many1(), and import the operator functions like "+" ">>" "<<" nakedly, without a namespace?

结束更新

虽然我可以

import parsec as p

要获取非运算符函数,我不太清楚怎么说:

from parsec import >>

由于以下显式导入运算符的尝试都失败了:

>>> from parsec import >>
  File "<stdin>", line 1
    from parsec import >>
                        ^
SyntaxError: invalid syntax
>>> from parsec import (>>)
  File "<stdin>", line 1
    from parsec import (>>)
                         ^
SyntaxError: invalid syntax
>>> from parsec import ">>"
  File "<stdin>", line 1
    from parsec import ">>"
                          ^
SyntaxError: invalid syntax
>>> from parsec import __lshift__, __rshift__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name '__lshift__' from 'parsec' ()

如何导入这些?

我认为运算符被定义为解析器对象上的方法,因此您不要将它们显式导入为运算符。如果您导入具有 p 命名空间的其他对象,并对它们执行运算符操作,它将 "just work" 因为解析器 class 已经定义了这些。