gpt4 book ai didi

python - 如何将(多个)正则表达式解析的函数参数传递给 python 函数

转载 作者:太空宇宙 更新时间:2023-11-03 19:24:42 25 4
gpt4 key购买 nike

我正在尝试构建一个 python 类来解析字符串,以及它是否与看起来的正则表达式匹配就像函数调用尝试在类上调用该函数一样,传递任何参数。

例如,像“foo("a", 20")”这样的字符串将转换为类似 self.foo("a", 20) 的字符串。

这是我到目前为止的代码..

class FooTranslate(object):
def create_string(self, letter, size):
return letter*size

def run_function(self, func_str):
match = re.match("([\w_]+)\((|[\W\d\w\,]+)\)", func_str)
if match == None:
print "Couldn't match a regex!"
return False
else:
func, fargs = match.groups()

try:
if fargs == "":
return self.__getattribute__(func)()
else:
return self.__getattribute__(func)(eval(fargs))
except AttributeError, e:
print "Invalid function call: %s" % (func)
return False

此代码适用于基本情况...

In [1018]: foot = FooTranslate()
In [1019]: foot.run_function("foo()")
Foo!
In [1020]: foot.run_function("bar(2)")
FooFoo

但是在使用 2 个参数函数的情况下:

In [1021]: foot.run_function("create_string('a', 2)")

in run_function(self, func_str)
24 return self.__getattribute__(func)()
25 else:
---> 26 return self.__getattribute__(func)(eval(fargs))
27 except AttributeError, e:
28 print "Invalid function call: %s" % (func)

TypeError: create_string() takes exactly 3 arguments (2 given)

原因是 eval() 调用将 Fargs 作为元组返回,其中 create_string()仅作为一个参数。知道如何传递可变数量的参数通过函数调用?或者有更好的替代方法来做到这一点?

最佳答案

您可以使用* operator将元组分解为函数的单独参数。例如:

def f(a, b, c):
print a, b, c

如果我像这样调用f(...):

f((1,2,3))

我收到错误:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: f() takes exactly 3 arguments (1 given)

但是如果我这样调用它:

f(*(1,2,3))

我得到:

1 2 3

如果函数采用可变数量的参数,* 运算符甚至可以工作。例如,给定以下函数:

def f2(a, b, *args):
print a, b,
for x in args:
print x,
print

如果我调用 f2(*(1,2,3,4,5)) 它会打印:

1 2 3 4 5

关于python - 如何将(多个)正则表达式解析的函数参数传递给 python 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8611979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com