有没有办法用字符串定义PYthon函数参数列表?

时间:2017-11-10 15:14:41

标签: python

是否可以通过如下字符串定义Python函数参数列表?:

param_list = "alpha, beta = 100, *args"

def my_func(param_list):
   return 100

4 个答案:

答案 0 :(得分:3)

不,没有合理的方法可以做到这一点。

答案 1 :(得分:1)

如果您出于某种原因希望能够使用字符串重新定义函数参数,则可以执行此操作,但它需要使用eval()和字符串格式。

简写示例:

#since you can do:
def a():
    return 1

def b():
    return 2

a = b
#a() returns 2 now, because calls to a() are actually calls to b() now

#you can also do:
a = eval("def a({str_of_args}): \n    return 3")

#a(proper arguments) now returns 3

话虽如此,我想不出任何情况下这实际上是一个好主意。 99.9%的情况下,它是一个丑陋的黑客,如果你必须这样做,那么它应该被视为一个标志,整个设计可能会出现严重错误。

答案 2 :(得分:-1)

我相信您需要拆分字符串并阅读'参数'。 python无法将您的字符串转换为参数。 猜猜你可以使用eval ...但它的丑陋。

你可以做的是建立一个字符串

"my_func(alpha, beta = 100, *args)"

并评估它:

eval("my_func(alpha, beta = 100, *args)")

你也可以这样做:

my_func(eval("alpha, beta = 100, *args"))

但是,您可能希望对功能进行更改,因为这会给您一个错误。

如果要传递可变数量的对象,请使用与其相同的args。

答案 3 :(得分:-1)

您可以传递可变数量的参数:

def someMethod(*listOfStringParameters):
    for i in listOfStringParameters:
        print(i)

someMethod("alpha", "beta", "gamma", "delta")

输出:

alpha
beta
gamma
delta