跳转到主要内容

一个用于自动删除对keys()的额外调用的工具。

项目描述

unkey

一个工具和pre-commit钩子,用于自动删除对keys()的额外调用。

安装

pip安装unkey

作为pre-commit钩子

有关说明,请参阅pre-commit

示例 .pre-commit-config.yaml

-   repo: https://github.com/mxr/unkey
    rev: v0.0.1
    hooks:
    -   id: unkey

概述

摘要

遍历Python字典将遍历其键,因此通常不需要调用keys()。删除这些调用可以使您的代码更简洁、更易读。

排除代码

unkey不支持flake8的# noqa或mypy的#type: ignore的等价功能来停止重写。直到此功能可用之前,请使用中间变量以防止重写。

# will be rewritten
min({1: 2, 3: 4}.keys())  # becomes min({1: 2, 3: 4})

# will not be rewritten
keys = {1: 2, 3: 4}.keys()
min(keys)

免责声明

由于AST解析并不总是告诉我们对象的类型,因此可能会有误报和不希望的改写或错误。话虽如此,此工具的设计是宁可不重写,而不是非常聪明地尽可能多地重写。要排除重写,请参阅上述部分。PR始终欢迎帮助!

功能

内置

重写具有可迭代参数的内置调用

 # simple cases
-min({1: 2, 3: 4}.keys())
+min({1: 2, 3: 4})

-min(d.keys())
+min(d)

-min(f().keys())
+min(f())

 # more complex cases
-min(d1().x.y(1, 2 ,3, (4, 5)).keys())
+min(d1().x.y(1, 2, 3, (4, 5)))

zip

重写zip()中的相关参数

-zip(d.keys(), {}.keys(), f().keys(), [1, 2, 3])
+zip(d, {}, f(), [1, 2, 3])

map / filter

重写mapfilter中的相关参数

-map(lambda x: x*2, d.keys())
+map(lambda x: x*2, d)

-filter(None, d.keys())
+filteR(None, d)

in

使用in重写相关比较

-if x in d.keys():
+if x in d:
     pass

列表推导式

重写相关的列表/字典/集合推导式和生成器表达式

-[x for x in d.keys()]
+[x for x in d]

-(x for x in d.keys())
+(x for x in d)

-{x for x in d.keys()}
+{x for x in d}

-{x: x for x in d.keys()}
+{x: x for x in d}

迭代

重写迭代

-for _ in d.keys(): pass
+for _ in d: pass

-for _ in {}.keys(): pass
+for _ in {}: pass

-for _ in f().keys(): pass
+for _ in f(): pass

要在此空间中进行额外的linting,请查看flake8-comprehensions

致谢

没有Anthony Sottile(https://github.com/asottile)的指导和工具,这个工具将无法实现,特别是pyupgradepre-commitunkey在前面者的基础上进行了大量修改,并在可能的地方注明了代码归属。谢谢!

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。

源代码分布

unkey-0.0.1.tar.gz (6.0 kB 查看哈希值)

上传时间 源代码

构建分布

unkey-0.0.1-py2.py3-none-any.whl (6.2 kB 查看哈希值)

上传时间 Python 2 Python 3

支持