Python 使用rope从方法签名中删除*args和**kwargs

Python 使用rope从方法签名中删除*args和**kwargs,python,refactoring,signature,variadic-functions,rope,Python,Refactoring,Signature,Variadic Functions,Rope,我正在使用eric4及其rope插件重构一些代码。 我有许多方法的签名使用*args和**kwargs语法。 我想更改这些签名并删除此参数 我尝试过使用重构>重构>更改方法签名,但这并没有删除*args和**kwargs参数 我想知道这是rope本身的限制,还是eric的插件不支持此功能。为什么要删除*args和**kwargs?要重构这些函数,重构库需要执行大量的自省,以了解正确的参数 例如,您将如何重构以下函数: def f(*args, **kwargs): a = args[0]

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

我尝试过使用重构>重构>更改方法签名,但这并没有删除*args和**kwargs参数

我想知道这是rope本身的限制,还是eric的插件不支持此功能。

为什么要删除*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和**kwargs并专注于其他重构工作。

为什么要删除*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和**kwargs并专注于其他重构工作。

更糟糕的是,这些参数也可以传递给另一个函数,因此要了解其中的内容,分析可能必须深入调用树。好吧,这是rope的局限性。无论如何,我的*args和**kwargs,目前,甚至没有使用。之所以将它们放在这里,是因为这些方法是半抽象类的一部分,半抽象类实现了一些逻辑,但没有实现具体的步骤,所以我将它们放在这里是为了允许子类传递选项。现在我知道还有其他更干净的方法,比如将选项传递给类的构造函数,所以我想删除它们。没关系,我会用手把它们取下来。无论如何,谢谢你的解释,更糟糕的是,这些参数也可以传递给另一个函数,因此分析要知道调用树中的内容可能需要深入到调用树的深处。好吧,这是rope的局限性。无论如何,我的*arg和**kwarg目前甚至没有使用。之所以将它们放在这里,是因为这些方法是半抽象类的一部分,半抽象类实现了一些逻辑,但没有实现具体的步骤,所以我将它们放在这里是为了允许子类传递选项。现在我知道还有其他更干净的方法,比如将选项传递给类的构造函数,所以我想删除它们。没关系,我会用手把它们取下来。无论如何,谢谢你的解释