使用绳索从方法签名中删除* args和** kwargs

时间:2012-09-01 12:51:43

标签: python refactoring signature variadic-functions rope

我正在使用eric4及其绳索插件来重构一些代码。 我有很多方法,其签名使用*args**kwargs语法。 我想更改这些签名并删除此参数。

我已尝试使用Refactoring>Refactoring>Change Method Signature,但这不会删除*args**kwargs个参数。

我想知道这是否是绳索本身的限制,或者是否是eric的插件不支持此功能。

1 个答案:

答案 0 :(得分:5)

为什么要删除*args**kwargs?要重构这些函数,重构库需要进行相当多的内省才能知道正确的参数。

例如,您将如何重构以下函数:

def f(*args, **kwargs):
    a = args[0]
    b = args[1]
    c = kwargs.get('c', 3)
    d = kwargs.get('d', 4)
    print a, b, c, d

你可以把它变成:

def f(a, b, c=3, d=4):
    print a, b, c, d

这需要相当多的代码分析才能做到这一点,对于实际功能来说,它更难。位置和关键字参数的数量可以变化(例如,函数可以迭代args),这使得很难确定正确的函数参数。

除非确实有需要,否则我会保留*args**kwargs,并专注于其他重构工作。