我正在定义一个需要使用用户定义函数user_function(a,b,possibly_lots_more_arguments)
的函数。问题是possibly_lots_more_arguments
可能为空。我认为有两种方法可以解决这个问题,我想知道一个人是否比另一个人“更好”。
这是一个相当简单的例子。 f
通过定义一个测试是否有额外参数的函数来处理这个问题。 g
通过创建更长的列表来处理此问题。 func1
和func2
函数显然是用户定义函数的玩具示例。
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
更好,但我可能需要多次调用用户函数,这可能会变得很难看。
我从来没有写过透明代码,只是为了确保一年后我能理解它。我在这里做的代码很可能被其他人使用。出于性能或可读性的原因,其中一种本质上更好,还是更好的另一种选择?
答案 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"