在运行时更改现有函数的变量名称

时间:2014-10-30 19:45:44

标签: python methods parameters

我想改变已经定义的函数的变量名。最后它应该是这样的:

def f(a=1):
    return a

#insert your code here    

print f(variable_name_different_from_a = 2)

此代码应打印数字2.这很难看,但这可能吗?

编辑: 我的问题确实是字面上的意思。在Python中,许多奇怪的事情是可能的,这是我经常学到的奇怪的东西。我也有一个用例,但最不可能解决这个问题。

1 个答案:

答案 0 :(得分:1)

如果事先知道新参数的名称

您可以重新定义f作为原始函数的包装器,而不是修改现有的函数对象,这听起来不是一个好主意(如果可能的话):

# insert this code there
_orig_f = f
def f(variable_name_different_from_a):
    return _orig_f(variable_name_different_from_a)

如果新参数的名称​​未提前

上面的包装器可以使用*a, **kw,并在将它们传递给包装函数之前对它们进行操作:

new_varname = raw_input('Enter var name')
def f(*a, **kw):
    if new_varname in kw and 'a' not in kw:
        kw['a'] = kw.pop(new_varname)
    return _orig_f(*a, **kw)

当使用位置或关键字args调用时,这适用于任何1-arg函数。