我在为我的项目编写python代码时想出了这种情况,并开始思考这个问题。
问题是一个字符串,其中包含一个函数名称及其参数,我们如何获取参数和函数名称给定函数中的参数数量。
我的第一个想法是:
s = 'func(a,b)'
index = s.find('(')
if(index != -1):
arg_list = s[index+1:-1].split(',')
func_name = s[:index]
但是当我开始思考更多时,我意识到如果在具有自己参数的函数中指定函数会是什么?
func1(func2(a,b,c),func3(d,e))
通过上述方法,我将得到正确的函数名称,但arg_list将包含
["func2(a","b","c)","func3(","d","e)"]
如何一般性地解决这种情况?
答案 0 :(得分:1)
>>> import pyparsing as pyp
>>> def get_name_and_args(a_string):
index = a_string.find('(')
if index == -1:
raise Exception("No '(' found")
else:
root_function, a_string = a_string[:index], a_string[index:]
data = {}
data[root_function] = pyp.nestedExpr().parseString(a_string).asList()[0][0].split(',')
return data
>>> print get_name_and_args("func(a,b)")
{'func': ['a', 'b']}
这解决了您使用pyparsing模块提供的更简单的示例。我不确定您希望输出的格式是什么,并且它不适用于嵌套示例。但是这应该足以让你开始
答案 1 :(得分:1)
如果您的语言看起来与Python类似,请使用ast.parse()
:
import ast
def parse(s):
tree = ast.parse(s)
print ast.dump(tree)
parse('f(a,b)')
您需要的所有信息都将以tree
编码。