PyCharm: 这种自动签名重构可行吗?
PyCharm: is this kind of automatic signature refactoring possible?
一个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 signature 有什么帮助吗?
好吧,PyCharm 会重新排序 kw 参数,但不会将位置参数更改为关键字参数(在调用中)。仅仅是电流限制还是我缺少某种自动执行此操作的方法?
这是一种方式:
将光标移至函数定义并重构 > 更改签名
在第一个参数之前添加一些具有默认值的虚拟参数(例如,REMOVEME
),这应该是 kw 参数,但在所有位置参数之后(没有默认值)
重构
再次进行签名重构,去除伪参数并重构。
现在所有的调用都在正确重新排序的地方使用位置参数。
注意:并非 100% 有效,在某些情况下会留下逗号,这可能是一个错误。另外有时会在通话中删除 **kwargs
...
因为 Python 3 的 keyword-only arguments 现在受到 PyCharm 的支持,您可以通过在 Change 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 的 Refactor > Change signature 有什么帮助吗?
好吧,PyCharm 会重新排序 kw 参数,但不会将位置参数更改为关键字参数(在调用中)。仅仅是电流限制还是我缺少某种自动执行此操作的方法?
这是一种方式:
将光标移至函数定义并重构 > 更改签名
在第一个参数之前添加一些具有默认值的虚拟参数(例如,
REMOVEME
),这应该是 kw 参数,但在所有位置参数之后(没有默认值)重构
再次进行签名重构,去除伪参数并重构。
现在所有的调用都在正确重新排序的地方使用位置参数。
注意:并非 100% 有效,在某些情况下会留下逗号,这可能是一个错误。另外有时会在通话中删除 **kwargs
...
因为 Python 3 的 keyword-only arguments 现在受到 PyCharm 的支持,您可以通过在 Change signature
中添加 *
作为第一个参数来执行上述重构对话框。