从 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 已经定义了这些。
我正在使用 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 已经定义了这些。