处理可能具有可变数量参数的用户定义函数

时间:2016-02-20 00:33:33

标签: python

我正在定义一个需要使用用户定义函数user_function(a,b,possibly_lots_more_arguments)的函数。问题是possibly_lots_more_arguments可能为空。我认为有两种方法可以解决这个问题,我想知道一个人是否比另一个人“更好”。

这是一个相当简单的例子。 f通过定义一个测试是否有额外参数的函数来处理这个问题。 g通过创建更长的列表来处理此问题。 func1func2函数显然是用户定义函数的玩具示例。

def f(user_function, parameters = None):

    def my_user_function(alpha, beta, my_parameters):
        if my_parameters == None:
            return user_function(alpha, beta)
        else:
            return user_function(alpha, beta, *my_parameters)

    for a in range(4):
        for b in range(3):
            if my_user_function(a,b,parameters):
                print "it's True"
            else:
                print "it's False"


def g(user_function, parameters = []):
    for a in range(4):
        for b in range(3):
            L=[a,b]+list(parameters) #parameters could be a tuple
            if (user_function(*L)):
                print "it's True"
            else:
                print "it's False"

def func1(a,b,c):
    return a+b<c

def func2(a,b):
    return a+b<4


print 'f(func1)'
f(func1,[4])
print 'g(func1)'
g(func1,[4])

print 'f(func2)'
f(func2)
print 'g(func2)'
g(func2)

我觉得g更好,但我可能需要多次调用用户函数,这可能会变得很难看。

我从来没有写过透明代码,只是为了确保一年后我能理解它。我在这里做的代码很可能被其他人使用。出于性能或可读性的原因,其中一种本质上更好,还是更好的另一种选择?

1 个答案:

答案 0 :(得分:0)

你有没有意识到*args空的args可以正常工作?

def h(user_function, parameters=()):
    for a in range(4):
        for b in range(3):
            if (user_function(a, b, *parameters)):
                print "it's True"
            else:
                print "it's False"