pyparsing <<= 和=符号区别
时间: 2023-09-05 08:07:52 浏览: 130
python3.3 matplotlib和pyparsing函数库
3星 · 编辑精心推荐
在 pyparsing 中,`<<=` 和 `=` 符号都用于将解析器对象与一个回调函数关联起来,以便在解析过程中触发回调函数。但是,它们之间有一些区别。
`<<=` 是一个原地操作符,它将解析器对象与回调函数关联起来,并将结果赋给解析器对象本身。这意味着解析器对象被修改了,而且不能再被重用。例如:
```
import pyparsing as pp
def my_callback(s, loc, tokens):
print(tokens)
parser = pp.Word(pp.alphas) << pp.Word(pp.nums).setParseAction(my_callback)
result = parser.parseString("hello 123")
```
在这个例子中,`<<=` 将解析器对象 `parser` 与回调函数 `my_callback` 关联起来,并将结果赋给 `parser`。然后,我们使用 `parser` 解析了字符串 `"hello 123"`,并触发了回调函数。
`=`, 另一方面,只是将解析器对象与回调函数关联起来,而不会修改解析器对象。这意味着可以重用解析器对象。例如:
```
import pyparsing as pp
def my_callback(s, loc, tokens):
print(tokens)
parser = pp.Word(pp.alphas).setParseAction(my_callback)
parser += pp.Word(pp.nums).setParseAction(my_callback)
result1 = parser.parseString("hello")
result2 = parser.parseString("123")
```
在这个例子中,我们首先将解析器对象 `parser` 与回调函数 `my_callback` 关联起来。然后,我们使用 `+=` 将另一个解析器对象与相同的回调函数关联起来。最后,我们使用 `parser` 解析了字符串 `"hello"` 和 `"123"`,并触发了回调函数。
因此,`<<=` 和 `=` 符号的区别在于它们是否修改了解析器对象本身。如果需要重用解析器对象,应该使用 `=` 符号。如果不需要重用解析器对象,可以使用 `<<=` 符号来简化代码。
阅读全文