有没有办法让pyparsing自动将语法元素的updated_at
设置为我在源代码中命名的内容?也就是说,我会编写类似
resultsName
它会自动执行
my_number = Word(nums)
答案 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的某个地方得到了它但我现在还不知道......