我正在编写一个解析器来解析数学表达式,其中包含变量。我想要所有捕获到的变量的列表。但是我只得到最后捕获的变量。下面是显示问题的最小示例。
>>> from pyparsing import *
>>> var = Word(alphas)
>>> expr = Forward()
>>> expr << var('var') + ZeroOrMore(Literal('+') + expr)
>>> foo = expr.parseString("x + y + z")
>>> foo
(['x', '+', 'y', '+', 'z'], {'var': [('x', 0), ('y', 2), ('z', 4)]})
>>> foo['var']
'z'
Run Code Online (Sandbox Code Playgroud)
我期待着['x','y','z']。我正在使用pyparsing 2.1版。
我想定义一个类Foo,其对象可以像,foo[1, a=2].
我试图通过装饰__getitem__Foo 的方法来实现这一点,但没有成功.下面是示例代码.
def decorator(func):
def func_(*args, **kewargs):
if 'a' in kewargs:
args = list(args) + [kewargs['a']]
return func(*args)
else:
return func(*args)
return func_
class Foo(object):
@decorator
def __getitem__(self, *items):
return items
foo = Foo()
>>> foo.__getitem__(2, a=10)
(2, 10)
>>> foo[2, a=10]
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
所以foo[...]不等同于foo.__getitem__(...),前者背后的东西是为前者完成的.我的问题是foo[2, a=10],如果有的话,我究竟能做什么以及如何工作.