1

一个项目的 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 的 Refactor > Change 签名有什么帮助吗?

好吧,PyCharm 会重新排序 kw 参数,但不会将位置参数更改为关键字参数(在调用中)。它只是当前的限制还是我错过了一些自动完成的方法?

4

2 回答 2

1

因为PyCharm 现在支持Python 3 的仅关键字参数,所以您可以通过在对话框中添加*作为第一个参数来执行所述重构。Change signature

于 2021-06-03T13:07:49.257 回答
0

这里有一种方法:

  1. 将光标放在函数定义和重构 > 更改签名

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

  3. 重构

  4. 再次转到签名重构,删除虚拟参数并重构。

现在所有的调用都使用位置参数,适当地重新排序。

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

于 2017-12-26T13:02:09.810 回答