DRY几乎有类似的功能和参数

时间:2018-03-09 16:17:07

标签: python-2.7 function

我有一个函数调用,我正在创建一个类似于:

的库
some_function(var1=x,var2=y)

同一个库有另一个函数,它可以进行类似的调用但是对沙箱进行调用:

some_test_function(var1=x,var2=y)

可能只写:

if sandbox:
    some_test_function(var1=x,var2=y)
else:
    some_function(var1=x,var2=y)

但是,我想知道是否有更清洁的方法来做到这一点。特别是,我可以将字典定义为{'var1':x,'var2':y}并将其传递给正确的函数?我的伪代码就像:

dict = {'var1':x,'var2':y}
function_name = 'some_test_function' if sandbox else 'some_function'
function_name(dict)

1 个答案:

答案 0 :(得分:2)

您创建的任何函数都会将其名称存储在locals()内置词典中。因此,您可以按名称访问方法,例如:

sandbox = True

def some_function(x, y):
  print(x, y)

def some_test_function(x, y):
  print("test", x, y)


function_name = "some_function"
if sandbox:
    function_name = "some_test_function"

locals()[function_name]('cat', 'dog')
# test cat dog

注意:如果这些是类中的函数,那么您应该看起来像执行类似任务的getattr()