在pyparsing中自动设置结果名称?

时间:2017-02-10 00:18:28

标签: python pyparsing

有没有办法让pyparsing自动将语法元素的updated_at设置为我在源代码中命名的内容?也就是说,我会编写类似

的代码
resultsName

它会自动执行

my_number = Word(nums)

2 个答案:

答案 0 :(得分:4)

你应该能够做到:

my_number = Word(nums)('my_number')

使用.setResultsName的快捷方式。一般来说,Python使得有问题的变量get at the name变得困难。

作为替代方案,如果您将它们列为字典,则可以执行以下操作:

for key,val in grammar_dict.items():
    grammar_dict[key] = val.setResultsName(key)

答案 1 :(得分:2)

使用inspect模块,您可以执行您想要的操作。定义函数srn

import inspect

def srn(expr):
    """Sets the results name to the variable *name* of `expr`"""
    cf = inspect.currentframe()
    of = inspect.getouterframes(cf)[1]
    fs = inspect.getframeinfo(of[0]).code_context[0].strip()

    # name of FIRST parameter
    try:
        args = fs[fs.find('(') + 1:-1].split(',')
        n = args[0]
        if n.find('=') != -1:
            name = n.split('=')[1].strip()
        else:
            name = n
        expr.resultsName = name
    except IndexError:
        pass
    return expr

然后在my_number = Word(nums)致电后:

srn(my_number)

my_number包含" my_number"为resultsName

免责声明1:这种方法效果很好,但非常容易进入Python内部,因此请自行承担风险。

免责声明2:这个想法不是我的 - 我从StackOverflow的某个地方得到了它但我现在还不知道......