Python PyCharm:这种自动签名重构可能吗?

Python PyCharm:这种自动签名重构可能吗?,python,pycharm,automated-refactoring,method-signature,function-signature,Python,Pycharm,Automated Refactoring,Method Signature,Function Signature,项目的Python代码有很多函数定义和调用,如: def some_function(a, b="", c=0, d=None, e="something"): # whatever pass some_function("a", "b", 1, e="something else") 这是一个非常棘手的问题(糟糕的做法-缺少上下文等),我想自动将其更改为: some_function(a="a", b="b", c=1, e="something else") (在某些情

项目的Python代码有很多函数定义和调用,如:

def some_function(a, b="", c=0, d=None, e="something"):
    # whatever
    pass

some_function("a", "b", 1, e="something else")
这是一个非常棘手的问题(糟糕的做法-缺少上下文等),我想自动将其更改为:

some_function(a="a", b="b", c=1, e="something else")
(在某些情况下,第一个位置参数可能保持不变)

在许多情况下,关键字参数的顺序不同,因此也可以根据函数定义顺序排列:

def some_method(self, a, b=1, c=2): pass
obj.some_method(a, c=12, b=0) -> obj.some_method(a, b=0, c=12)
PyCharm的重构>更改签名有什么帮助吗

PyCharm会对kw参数进行重新排序,但不会将位置参数更改为关键字参数(在调用中)。这仅仅是当前的限制,还是我缺少一些自动执行的方法?

这里有一种方法:

  • 将光标放在函数定义上,然后重构>更改签名

  • 在第一个参数前面添加一些默认值的伪参数(例如,
    REMOVEME
    ),第一个参数应该是kw参数,但在所有位置参数之后(没有默认值)

  • 重构

  • 再次转到签名重构,删除伪参数并重构

  • 现在,所有的调用都使用了位置参数,并正确地重新排序


    注意:不能100%工作,在某些情况下会留下逗号,这可能是一个错误。另外,有时在调用中剥离
    **kwargs

    因为PyCharm现在支持Python 3,所以您可以通过在
    更改签名
    对话框中添加
    *
    作为第一个参数来执行上述重构。

    在我发布问题后的两分钟内,我自己找到了答案!请随时发布更简单的方式,如果有的话