PyCharm:这种自动签名重构是否可行?

时间:2017-12-26 12:49:10

标签: 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")

(好吧,在某些情况下,第一个位置参数可以保持不变)

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

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参数重新排序,但不会改变关键字参数的位置参数(在调用中)。这只是当前的限制还是我错过了一些自动完成的方法?

2 个答案:

答案 0 :(得分:1)

这里有一种方式:

  1. 将光标放到函数定义和Refactor>更改签名

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

  3. 重构

  4. 再次转到签名重构,删除伪参数和重构。

  5. 现在所有调用都使用位置参数,在适当的时候正确重新排序。

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

答案 1 :(得分:0)

由于 PyCharm 现在支持 Python 3 的 keyword-only arguments,您可以通过在 * 对话框中添加 Change signature 作为第一个参数来执行上述重构。