python - Python 代码风格:有没有办法配置 linter 将参数拆分为多行?
问题描述
目前,我正在使用 Django 3.1.4 开发 Python 3.8 项目,我希望以以下方式强制执行代码样式:
将可迭代对象拆分为多行,将括号与其内容保持在不同的行中。例如:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": os.getenv("DATABASE_NAME", "my_db"),
...
"PORT": os.getenv("DATABASE_PORT", "5432"),
}
}
...
CHOICES = (
(LOCATION, "Location"),
(INTEREST, "Interest"),
(CULTURE, "Culture"),
)
将函数签名参数拆分为多行,其中它们不适合同一行,每行一个参数,以提高可读性。例子:
def test_user_can_filter_all_communities(
self,
filter_field: str,
filter_value: JSONSerializable,
include_results: list,
):
# my code here
...
目前对我来说最重要的是后者。
我曾尝试使用autopep8
、和pylint
,但尽管尝试了不同的配置,但我目前无法使用自动代码格式化程序来实现这一点。yapf
black
当我使用black
时,参数如下所示:
def test_user_can_filter_all_communities(
self, filter_field: str, filter_value: JSONSerializable, include_results: list
):
这让我发疯,因为我喜欢“枚举”我的函数/方法立即采用多少参数。
当我使用yapf
它时会发生什么:
def test_user_can_filter_all_communities(self,
filter_field: str,
filter_value: JSONSerializable,
include_results: list):
不幸的是,它仍然不理想,因为我对变量名很冗长,所以从上面的参数继续缩进在很多时候是不可能的,同时还要强制行长度限制。
我习惯于以这种方式编写代码,这种风格让我更有效率,此外还能帮助我发现代码异味和潜在的错误。但是目前我正在自己开发一个中型代码库,并且通过手动格式化来强制执行这种样式占用了我太多的时间。
是否有任何自动代码格式化程序可以帮助我实现这一目标?或者有人知道如何通过上述方法之一实现这一目标吗?
(我确实记得 3 年前在一个项目中工作,我们使用pylint
or强制执行这种代码样式black
,所以它应该是可行的,但我不知道如何。)
先感谢您。
解决方案
在你的最后一个参数后添加一个逗号,黑色会做你想要的。
def test_user_can_filter_all_communities(
self, filter_field: str, filter_value: JSONSerializable, include_results: list,
):
推荐阅读
- numpy - 删除具有附加要求的重复项
- heroku - 使用 brew 安装 Heroku
- batch-file - 从当前文件夹中的所有 zip 文件中提取所有特定文件,并将仅文件压缩回单独的文件夹批处理
- django - Django ORM 性能问题
- java - 离子cordova构建android错误nuillpoijtexception
- flutter - Flutter 小部件最佳实践:内部类与函数
- javascript - 更新一栏信息
- python - 如何在 Python 中为元组分配标签?
- ios - NavigationLink 与 SwiftUI:表达式类型不明确,没有更多上下文
- imagemagick - Imagemagick 是否具有将图像重绘/扭曲到各种地图投影的功能?即 mollweide,墨卡托,正交