折衷的代码格式化程序。

tan的Python项目详细描述


#棕褐色是[黑色]的叉子(https://github.com/ambv/black)。代码格式化程序。

tan通过--use tabs命令行参数实现对制表符缩进的支持。





通过使用它,您同意放弃对手动格式化细节的控制。作为回报,
*black*给你速度,决定论,和自由从"pycodestyle"
唠叨的格式。您将为
更重要的事情节省时间和精力。


无论您正在阅读的项目是什么,变黑的代码看起来都一样。
一段时间后,格式变得透明,您可以改为专注于
内容。


*black*通过生成尽可能减小差异。


现在使用[黑操场](https://black.now.sh)尝试一下。

--

*内容:**[安装和使用](安装和使用)**
**[代码样式](黑代码样式)**
**[pyproject.toml](pyprojecttoml)***|
**[编辑器集成](编辑器集成)**
**[blackd](blackd)**
**[版本控制集成](版本控制集成)**
**[忽略未修改的文件](忽略未修改的文件)**
**[证明](证明)**
**[显示您的时尚达人](3535;展示你的时尚达人)**
**[贡献](贡献黑)**
**[更改日志](更改日志)**
**[作者](作者)**















python 3.6.0+才能运行,但也可以用它重新格式化python 2代码。





<<
<
提供许多选项。您可以通过运行
`black--help`:

```text
black[options][src]…

options:
-l,--要环绕的行长度整数来列出它们。[默认值:88]
--py36允许对所有输入文件使用python 3.6语法。这将在函数
签名和调用中的尾随逗号也放在*args和
**kwargs之后。[默认:每个文件自动检测]
--pyi格式化所有输入文件,如键入stubs
,而不考虑文件扩展名(在标准输入上管道
源时有用)。
-s,--跳过字符串规范化
不要规范化字符串引号或前缀。
--检查不要写回文件,只返回
状态。返回代码0表示不会有任何更改。返回代码1意味着某些文件将被重新格式化。返回代码123表示存在内部错误。
--diff不写回文件,只输出stdout上每个文件的diff

--fast/--safe if--fast-given,跳过临时健全性检查。
[默认值:-安全]
--包含文本一个正则表达式,该表达式与应包含在递归搜索中的文件和目录相匹配。在windows上,对目录使用forward
斜杠。[默认值:\.pyi?$]
--排除文本一个正则表达式,它匹配在递归搜索中应该排除的文件和目录。在windows上,使用forward
目录的斜线。[默认值:
build/buck out/dist/u build/\.git/\.hg/
\.mypy_cache/\.nox/\.tox/\.venv/]
-q,--quiet不会向stderr发出非错误消息。错误
仍会发出,使用
2>;/dev/null使其静音。
-v,--verbose还会向stderr发出有关由于
而未更改或忽略的文件的消息。--exclude=。
--版本显示版本并退出。
--配置路径从路径读取配置。
--帮助显示此消息并退出。
````

*black*是一个性能良好的Unix风格的命令行工具:
*如果没有传递源,则不执行任何操作;
*如果使用"-`
作为文件名,则将从标准输入读取并写入标准输出;
*仅在标准错误时向用户输出消息;
*退出时使用代码0,除非发生内部错误(或"check"已被使用)。




然而,它仍然是非常新的。
事情可能会有一段时间不稳定。这是由
"beta"trove分类器以及版本号中的"b"明确表示的。
这对您意味着**在格式化程序变得稳定之前,
您应该预期将来会有一些格式更改**。也就是说,没有计划进行任何重大的风格更改,主要是对bug
报告的响应。

这会减慢速度。如果您有信心,请使用
`--fast`.



黑色*代码样式

*黑色*将整个文件重新格式化。它是不可配置的。它不考虑以前的格式。它不会重新格式化以"fmt:off"开头、以"fmt:on"结尾的
块。`#fmt:on/off`
必须在相同的缩进级别上。它还可以识别[yapf](https://github.com/google/yapf)的块注释
与跨行代码一样的效果。



水平空格的规则可以概括为:做任何让"pycodestyle"高兴的事情。
black*使用的编码样式可以看作是
pep 8的严格子集。

如果这符合分配的行长度,
很好。
``py3
*黑色*将查看第一个外部匹配括号的内容,并将其放在单独的缩进行中。
``py3
限制、查找行、捕获局部变量

```

如果匹配方括号对的内容以逗号分隔(如参数列表或dict文本等)
,则*black*将首先尝试将它们与匹配方括号放在同一行。如果这不起作用,它将把它们放在单独的行中。ike,debug:bool=false):
"将‘variables’应用于‘template’,并写入‘file’。"
"open(file,'w')为f:



out:


def very廑important廑function(
template:str,
*variables,
file:os.pathlike,
调试:bool=false,
):将"变量"应用于"模板",并写入"文件"。
打开(文件,"w")作为f:

```


这样的格式会产生更小的差异;当您添加或删除一个元素时,它总是只有一行。去掉右括号可以在代码的两个不同部分之间提供一个清晰的分隔符
,否则它们共享相同的
缩进级别(如上面的
示例中的参数列表和docstring)。

dict)或一行"from"
导入无法容纳分配的长度,它总是被拆分为每行一个
元素。这将最小化差异,并使
代码的读者能够找到哪个提交引入了特定条目。这也使*black*与[isort]兼容(https://pypi.org/p/isort/)
配置如下。


<;details>;
<;summary>;兼容的`.isort.cfg`<;summary>;

```
[设置]
多行输出=3
包含尾随逗号=真
强制网格换行=0
使用括号=真
行长度=88
````

等效命令行是:
`````
$isort--多行=3--尾随逗号--强制网格换行=0--使用括号--线宽=88[file.py]
```
<;/详细信息>;


行长

*黑色*默认值
为每行88个字符,正好是80个字符的10%。这个数字
比80
(最流行的)甚至79(标准库使用的)生成的文件要短得多。在
概述中,[90 ish似乎是明智的选择](https://youtu.be/wf-bqajzb8m?t=260)。

*布莱克*会尽量尊重这一点。
然而,有时它不能不违反其他规则。在
这种罕见的情况下,自动格式化的代码将超过您分配的限制。

屏幕分辨率。长线也使得在文档或幻灯片中整洁地呈现代码变得更加困难。


或者,使用[bugbear](https://github.com/pycqa/flake8 bugbear)
b950警告,而不是e501,并将最大行长度保持在80,这可能是您已经在使用了。你可以这样做:
``ini
[flake8]
max line length=80

select=c,e,f,w,b,b950
ignore=e501
````


[Bugbear的文档](https://github.com/pycqa/flake8 bugbear自以为是的警告)
对此进行了解释。tl;dr是"就像高速公路限速一样,如果你超速几公里/小时,我们不会打扰你"。




这符合
pep 8的精神,即在函数中,垂直空格只应
少量使用。


*black*将允许在函数中使用单个空行,并允许在原始编辑器留下的模块级上使用单个和
双空行,除非
在括号内。因为这样的表达
总是重新格式化以适应最小的空间,此空白将丢失。

它还将在函数定义前后插入适当的间距。
它是内部函数前后的一行,是模块级函数和类前后的两行。*black*不会在函数/类定义和独立注释之间的
行放在给定函数/类之前。


*black*将在类级docstring
和后面的第一个字段或方法之间强制执行单个空行。这符合
[pep 257](https://www.python.org/dev/peps/pep-0257/多行docstrings)。

*black*不会在函数docstrings后面插入空行,除非由于内部函数从
之后立即开始,因此需要


逗号

*black*将在每个元素位于其自身行上的表达式中添加尾随逗号。这包括函数
签名。


如果表达式适合一行,则删除不必要的尾随逗号。这使得您的行不超过分配的行长度限制的可能性增加了1%。此外,在这个场景中,如果您在调用中添加了
另一个参数,那么无论如何,您可能会将它放在同一行中。这不会使diff变得更大。

删除尾随逗号的一个例外是只有一个元素的元组表达式。在这种情况下,*black*不会触及单个尾随的
逗号,因为这会意外地更改基础数据类型。注意
索引时使用逗号也是如此。这是一个伪装的元组:```numpy`数组[3,]```.


添加尾随逗号的一个例外是函数签名
包含`*`,`*args`,或`**kwargs`。在这种情况下,只有在python 3.6上使用尾随逗号
才是安全的。*黑色*将检测您的文件是否已
仅3.6+,并在这种情况下使用尾随逗号。如果您想知道它是如何知道的,那么它会查找f字符串,并在函数签名中使用尾随的逗号,这些函数签名中有星。换句话说,
如果您希望在这种情况下使用尾随逗号,*black*没有意识到这样做是安全的,请手动将其放在那里,*black*将
保留它。



只要
不会导致比以前更多的反斜杠转义,它就会将后者替换为前者。

*black*还会标准化字符串前缀,使其始终小写。
除此之外,如果您的代码已经是python 3.6+或使用的是unicode`未来导入,*black*将从
字符串前缀中删除'u',因为在这些情况下它是没有意义的。

将结束于同一行的连续字符串(详见
[26](https://github.com/ambv/black/issues/26))合并在一起。

他们预期英语中会出现撇号。它们符合PEP 257中描述的docstring标准。无论使用何种字体和语法突出显示,
双引号(`""`)中的空字符串都不可能与
单双引号混淆。
除此之外,字符串的双引号与c是一致的,而c与python有很多交互作用。

英语中,输入单引号比双引号要容易一些。后者需要使用shift
键。我在这里的建议是继续使用输入速度更快的方法,让*black*处理转换。

对于数据,可以使用le quotes,对于
human readable strings"](https://stackoverflow.com/a/56190)可以使用双引号,您可以在命令行上
pass`--skip string normalization'。这是指
一个采用帮助程序,避免在新项目中使用它。

`而不是"1e10"。python 2的长文本
样式为'2l',而不是'2l',以避免'l'和'1'之间的混淆。在
python 3.6+中,*black*在长数值文本中添加下划线以帮助
可读性:`100000000'变为'100畀000畀000'。

这样一来,*black*就符合[pep 8]最近的变化(https://www.python.org/dev/peps/pep-0008/should-a-line-break-before-or-after-a-binary-operator)
样式指南,这就强调了这种方法可以提高可读性。

因为"w503"不符合pep 8,
您应该告诉flake8忽略这些警告。



两边的空间,除非省略了参数
(例如``ham[1+1:````)。它还指出,对于扩展切片,两个`:``
运算符必须具有相同的间距,除非参数被忽略(``ham[1+1::]`)。*black*始终执行这些规则。

此行为可能会在样式指南中引发"e203 whitespace before":"warnings"。由于"e203"不符合pep 8,您应该
告诉flake8忽略这些警告。



任何表达式都可以用一对括号括起来形成一个原子。有几个有趣的例子:

-`if(…):`
-`while(…):`
-`for(…)in(…):`
-`assert(…),(…)`
-`from x import(…)`
-赋值如下:
-`target=(…)`
-`target:type=(…)`
-`some,*un,packing=(…)`
-`augmented+=(…)`

在这些情况下,当整个语句适合一行时,或者如果内部表达式没有任何分隔符可进一步拆分时,括号将被删除。如果只有一个分隔符,表达式
以一个括号开始或结束,那么也可以成功地将括号
省略,因为现有的括号对无论如何都将整齐地组织表达式
。否则,将添加括号。

例如,这些括号不会被删除:
``py3
return not(this or that)
decision=(maybe.this()and values>;0)或者(maybe.that()and values<;0)
```



这种api风格被称为[fluent interface](https://en.wikipedia.org/wiki/fluent_interface)。
*black*通过将调用或索引操作后的点视为非常低优先级的分隔符来格式化这些点。显示
行为比解释它更容易。看这个例子:
``py3
def example(session):
result=(
session.query(models.customer.id)
.filter(
models.customer.account==account\u id,
models.customer.email==电子邮件地址,

.排序依据(models.customer.id.asc())
.all()
`````



输入的一个
用例是为
不能直接包含它们的模块提供类型注释(它们可能是用c编写的,也可能是第三方的,或者它们的实现可能过于动态等等)。[扩展名为".pyi"的存根文件](https://www.python.org/dev/peps/pep-0484/存根文件)可用于描述外部模块的键入信息。这些存根
文件忽略了它们所描述的类和函数的实现,而只包含文件的结构(列出了带有其成员的全局函数、函数和类)。对于这些文件,建议的
代码样式比PEP 8更简洁:

*首选与类/函数签名位于同一行的"…";
*避免连续模块级函数之间的垂直空格,
名称或单个类中的方法和字段;
*使用单个顶级类定义之间的空行,或者如果类非常小,则无空行。

*black*执行上述规则。对于
formatting`.pyi`文件,还有一些附加的指导原则尚未强制执行,但可能在
格式化程序的未来版本中:

*所有函数体都应为空(包含"…"而不是正文);
*不要使用docstring;
*更喜欢"…"而不是"pass";
*参数使用默认值时,请使用"…"而不是实际的默认值;
*避免在类型批注中使用字符串文字,存根文件支持本地转发引用(如python 3.7代码中的"from uuu future"
import annotations`);
*使用变量注释而不是类型注释,即使对于
以较旧版本的python为目标的存根;
*对于默认为"none"的参数,显式使用"optional[]";
*使用"float"而不是"union[int,float]。



pyproject.toml

*black*能够从"pyproject.toml"文件中读取其
命令行选项的特定于项目的默认值。这对于为您的项目指定自定义的`--include`和`--exclude`
模式特别有用。

**pro提示**:如果您问自己"我需要配置什么吗?"
答案是"不"。*黑色*是所有合理的默认值。



\pyproject.toml文件到底是什么?

[pep 518](https://www.python.org/dev/peps/pep-0518/)将
`pyproject.toml'定义为存储生成系统的配置文件
python项目的要求。借助于像[poetry](https://poetry.eustace.io/)或
[flit](https://flit.readthedocs.io/en/latest/)这样的工具,它可以完全取代对"setup.py"和"setup.cfg"文件的



` pyproject.toml`从命令行上传递的所有文件和目录的公共
基目录开始。
如果不存在,则在父目录中查找。当它找到文件、或".git"目录或".hg"目录、
或文件系统的根目录(以先到者为准)时,它将停止查找。*black*将从当前工作目录开始查找配置


在这种情况下,*black*不会查找任何
其他文件。

如果找到并使用了一个文件,您将看到一条蓝色消息。


请注意,"blackd"不会使用"pyproject.toml"配置。




OML)文件。它包含不同工具的单独
部分。*black*正在使用`[tool.black]`
部分。选项键与命令行上的选项的长名称相同。


注意,对于正则表达式,必须在toml中使用单引号字符串。它相当于python中的r字符串。多行
字符串被黑色视为详细的正则表达式。使用`[]
表示有效的空格字符。

<;details>;
<;summary>;示例"pyproject.toml"<;/summary>;

``toml
[tool.black]
行长=88
py36=true
include='\.pyi?$'
exclude=''
/(
\.git
您可能不需要这些。
blib2to3
最后,用户在命令行上提供的选项将同时覆盖这两个选项。

*black*在整个
运行期间将只使用一个"pyproject.toml"文件。它不查找多个文件,也不从文件层次结构的不同级别组合
配置。





安装"black"。

``控制台
$pip安装black
````

>2。找到您的"black"安装文件夹。

macos/linux/bsd上:

``控制台
$which black
/usr/local/bin/black`可能的位置
`````


windows上:

``控制台
$where black
%localappdata%\programs\python36-32\scripts\black.exe#可能的位置
```

>3。使用"文件->;设置->;工具->;外部工具"在PyCharm中打开外部工具。

4。单击+图标可添加具有以下值的新外部工具:
-name:black
-description:black是不妥协的python代码格式化程序。
-program:<;install_location_from_step_2>;
-arguments:`$filepath$`

5。通过选择"工具->;外部工具->;黑色"来格式化当前打开的文件。
-或者,可以通过导航到"首选项->;键映射->;外部工具->;外部工具-黑色"来设置键盘快捷方式。

6。或者,在每次保存文件时运行黑色:

1。确保安装了[文件观察程序](https://plugins.jetbrains.com/plugin/7177-file-watchers)插件。
2.转到"首选项->;工具->;文件监视程序",然后单击"+"添加新的监视程序:
-名称:black
-文件类型:python
-范围:项目文件
-程序:<;从步骤2安装位置>;
-参数:`$filepath$`
-输出刷新路径:`$filepathrativetoprojectroot$`
-工作目录:`$projectfiledir$`


\vim

命令和快捷方式:

*`:black`格式化整个文件(不支持范围);
*`:black upgrade`升级virtualenv中的*black*;
*`:black version`在
virtualenv.中获取当前版本的*black*。


` ~/.vim/black`)

[插件/黑.vim](https://github.com/ambv/black/tree/master/plugin/black.vim)。
如果这需要对vim 8的内置版本或病原体等进行任何更改,请告诉我。


此插件**需要vim 7.0+使用python 3.6+支持**。它需要python 3.6才能在vim进程中运行*black*,这比调用外部命令快得多。


在第一次运行时,插件使用正确的python版本创建自己的virtualenv并自动安装*black*。您可以稍后通过调用`:black upgrade`并重新启动vim来升级它。


如果您需要做任何特殊的事情来使您的virtualenv正常工作并安装*black*(例如,您希望从master运行一个版本)。
手动创建一个virtualenv并指向它。
插件将使用它。

**
在ubuntu 17.10上,vim默认带有python3.6。
在macos上,使用自制程序运行:`brew install vim--with-python3`。
从源代码构建vim时,使用:
`./configure--enable-python3interp=yes`。网上有很多关于如何做到这一点的指南。




\visual studio code

使用[python扩展](https://marketplace.visualstudio.com/items?itemname=ms python.python)
([说明](https://code.visualstudio.com/docs/python/editing u formatting))。





[blackcellmagic](https://github.com/csurfer/blackcellmagic)。



\python语言服务器

您可以将[python语言服务器](https://github.com/palantir/python-language-server)与
[pyls black]插件一起使用。




编辑器

其他编辑器需要外部贡献。

欢迎使用修补程序!

任何可以使用stdio模式通过*black*传输代码的工具(只需
[使用"-"作为文件名](https://www.tldp.org/ldp/abs/html/special chars.html dashref2))。
格式化的代码将在stdout上返回(除非"--check"已通过
)。*black*仍然会在stderr上发出消息,但这不会影响您的用例。

功能性优于一个简单的协议。使用它的主要好处是,避免每次想要黑文件时都要支付启动新的*black*进程的
成本。


您需要执行'pip install black[d]'才能安装它。

您将看到一行代码,其中提到服务器的版本
,以及它所监听的主机和端口。` blackd'将打印一个访问日志
,类似于标准输出上的大多数web服务器,与无效格式化请求导致的任何异常跟踪
合并。

`blackd'提供的选项甚至比*black*更少。您可以通过运行
`blackd--help`:

``text
用法:blackd[options]

options:
--bind host text address to bind the server to.
--bind port integer port to listen on
--version显示版本并退出。< BR/>-h,--帮助显示此消息并退出。
```

`blackd`仅接受`/`路径处的"post"请求。请求主体
应包含要格式化的python源代码,并根据"content type"请求头中的"charset"字段对其进行编码。如果未指定
`charset',`blackd`假定为'utf-8`.


这些
对应于*black*的命令行标志。有一个例外:
`x-protocol-version`如果存在,则应具有值'1',否则,
请求将被拒绝,并带有'http 501'(未实现)。

`命令行标志。
-`x-skip-string-normalization`:对应于`--skip string normalization`
命令行标志。如果存在且其值不是空字符串,则不会执行字符串规范化。
-`x-fast-or-safe`:如果设置为"fast",则当
传递"--fast"命令行标志时,`blackd`将充当*black*。
-`x-python-variant`:如果设置为"pyi",`当
传递"--pyi"命令行标志时,black`将充当*black*的作用。否则,其值必须对应于python版本。如果该值至少表示python 3.6,"blackd"将在传递"--py36"命令行标志时充当"black"。

在消息正文中提到有问题的头的名称。

响应正文为空。
-`http 200`:如果输入需要格式化。响应体
包含变黑的python代码,并相应地设置"content type"头

-`http 400`:如果输入包含语法错误。错误的详细信息在响应正文中返回。
-`http 500`:如果在格式化输入时出现任何错误。
响应正文包含错误的文本表示。

[预提交](https://pre commit.com/)。一旦您[安装了它](https://pre commit.com/install),将此添加到存储库中的
`.pre-commit config.yaml`中:
``yaml
repos:
-repo:https://github.com/ambv/black
rev:stable
hooks:
-id:black
语言版本:python3.6
```
,然后运行"pre-commit install",就可以了去吧。

避免在钩子里使用"args"。相反,将必要的配置
存储在"pyproject.toml"中,这样编辑器和black all的命令行用法就可以在您的项目中保持一致。请参见*black*自己的"pyproject.toml"
作为示例。


如果您已经在使用python 3.7,请相应地切换"语言版本"。最后,"stable"是一个标记,它被固定到pypi上最新的
版本上。如果您希望在master上运行,这也是一个选项。



此信息按用户存储。文件的确切
位置取决于*black*版本和运行*black*
的系统。文件不可移植。常见操作系统上的标准位置是:

*windows:`c:\\用户\<;用户名>;\appdata\local\black\black\cache\<;版本>;\cache。<;行长>;<;文件模式>;.pickle`
*macos:`/users/<;用户名>;/library/caches/black/<;版本>;/cache。<;行长度>;<;文件模式>;.pickle`
*Linux:`/home/<;用户名>;/.cache/black/<;版本>;/缓存。<;行-length>;<;file mode>;.pickle`

`file mode`是一个int标志,用于确定文件是否仅格式化为3.6+,
as.pyi,以及是否省略字符串规范化。




[作者](https://smile.amazon.com/s/ref=nb_sb_noss?url=search alias%3daps&field keywords=dusty+phillips:

>;*black*是固执己见的,所以你不必这么做。

**hynek schlawack**,"`attrs`"(https://www.attrs.org/)的创建者,twisted和cpython的核心开发人员:

>;一个不烂的自动格式化程序就是我的全部。想要圣诞节!

**carl meyer**,[django](https://www.djangoproject.com/)核心开发者:


>;至少名字不错。

**kenneth reitz**,[`requests`](http://python requests.org/)
和[`pipenv`](https://docs.pipenv.org/):

>;这大大改进了代码的格式。非常感谢!


[代码样式:黑色](https://img.shields.io/badge/code%20style-black-000000.svg)(https://github.com/ambv/black)
`````

图片::https://img.shields.io/badge/code%20style-black-000000.svg
:目标:https://github.com/ambv/black
````

[代码风格:黑色](https://img.shields.io/badge/code%20style-black-000000.svg)(https://github.com/ambv/black)



*black*与*gofmt*一样可配置
这是经过深思熟虑的。

bug报告和修复总是受欢迎的!但是,在建议使用
新功能或配置旋钮之前,请先问问自己为什么需要它。如果
能够更好地与某些工作流集成,修复不一致性,
可以加快速度,等等-继续!另一方面,如果你的答案是"因为我不喜欢特定的格式",那么你还没有准备好接受"黑色"。这样的更改不太可能被接受。
您仍然可以尝试,但要准备失望。


#469):

*数字文本被规范化为包括python 3.6上的``分隔符+代码

*数字文本中的``代码被识别为python 3.6+

*数字文本中的大多数字母都是小写的(例如,在'1e10'中,` 0x01`)

*十六进制数字始终大写(例如"0xbadcode")

*添加"blackd",请参阅[其文档](blackd)以获取更多信息(349)


*相邻的字符串文本现在被正确地拆分为多行(463)


*现在将尾随逗号添加到不适合行(250)的单个导入中

*当成功对加快对格式正确的未修改文件(448)的连续检查的文件现在已删除文件开头的空白(399)


*fixed mangling[pweave](http://mpastell.com/pweave/)和
[spyder ide](https://pythonhosted.org/spyder/)special注释(532)

*修复了在解包大元组时的不稳定格式(267)

*修复了对具有重命名(389)的"未来"导入的解析

*修复了"fmt:off"在"yield"和其他节点(385)之前时的范围

*修复了lambda表达式的格式使用默认参数(468)

*修复了``async for``语句:*black*不再将它们分成单独的
行(372)

*注意:vim插件停止注册``,=``作为默认和弦,结果发现
是个坏主意(415)



mt:off`(371)







*输入存根文件(`.pyi`)现在在常量(340)


>
*它们现在也可以在括号对(329)





*它们现在也可以在括号对()




<>*它们现在可以正常工作了跨函数/类边界(335)

*当缩进块以空行开始或未对齐
注释(334)

*使单击在无效环境中不失败时,它们现在工作;请注意,单击是正确的,但是在处理python源代码时,我们需要访问非ascii文件路径的可能性很低(277)


*修复了f字符串在插值表达式(
322)中使用引号的不正确格式在文件中找到的长列表文本

*修复了在具有许多同级节点的ast节点上不必要的减速

*修复了在字符串规范化期间互相拆开反斜杠的问题

*修复了由于指向项目目录外部的符号链接而导致的崩溃








<18.6b2


*增加了`--config`(65)




*增加了`-h`相当于`--help`(316)的`-h`--help`(316)


*修正了使用`-s`时未修改的不正确的文件缓存

*修正了字符串解包中的额外空间(305)固定了字符串解包中的额外空间(305)






*修正了空空格式化三重引用字符串(313)

*修复了在没有
注释的行上进行注释放置计算时不必要的减速



\18.6b1

*修补程序:不在stdout上输出面向人的信息(299)

*修补程序:不在非零返回代码上输出cake emoji








<18.6b0


*增加了`--include `和`--exclude `(270)



*增加了`--skip字符串规范化`(118)




*增加了`--verbose `--verbose `(283)


*现在`--diff`中的头输出实际上符合统一的diff规范


>
*br/>
*增加了>
*增加了`--修正了长平凡赋值被包装在不必要的括号中(273)

*修复了当行包含多行字符串(232)时不必要的括号

*修复了在使用旧版本的click时stdin处理不正常的问题(276)

**black*现在保留行结尾就地格式化文件时(258)



\使
*black*适用于站点包不可由用户写入的环境(192)


**black*现在在类级docstring
(和/或字段)之后强制执行pep 257空行,并且第一个方法

*修复了在在大型表达式(237)


*的行拆分中省略的尾部修复了在` fmt:off`部分(224)中删除的可选括号


*修复了很长导入中的星被错误地包装在可选括号中时生成的无效代码
(234)


*修复了在
尾部移动内联注释时的不稳定格式,该尾部在大型表达式的行拆分中被忽略
(238)


*修复了类声明和第一个
方法之间的多余空行(如果没有类docstring或字段)present(219)

*修复了函数签名和内部函数或内部类之间的多余空行(196)




(67)


*数据结构文本(元组、列表、字典和集合)现在也总是像导入一样展开,如果它们不适合单个
行(152)


*切片现在也根据PEP 8(178)格式化

*括号现在也被自动管理在赋值和返回的右边语句(140)


*数学运算符现在使用它们各自的优先级来分隔多行
表达式(148)


*现在,在以括号开头或结尾且只包含单个运算符(177)的表达式上省略了可选括号

*为空类定义中的圆括号现在被删除(145,180)


*字符串前缀现在标准化为小写,并且在python 3.6+上删除了"u"
,在python 2.7+上删除了带有"unicode"文本的代码
以后的导入(188,198,199)

*键入存根文件(`.pyi`)现在的格式与PEP 484(207,210)的格式一致


*重新格式化许多文件时的进度现在以增量方式报告

*固定尾片(带括号的内容)不必要地在删除结束括号后将
分解为自己的行(119)

*assignments(215)


*修复了只使用一个名称不从导入中拆分long的问题

*修复了python 3.6+文件发现问题,方法是同时查看带有
解包的函数调用。此修复了在带有星的函数签名和带有星的函数调用中同时使用尾随逗号
但前者将被重新格式化为一行时出现的不确定格式问题。

*修复了处理可选括号(193)


*修复了"是"、"是"的错误not、in和not in不被认为是用于
拆分目的的运算符


*修复了遇到死符号链接时的崩溃




磁盘上未更改的
将不会重新格式化(109)

*`--check`和`--diff`不再是互斥的(149)

*通用星型表达式处理,包括双星型;这个
修复了乘法使表达式对于尾随逗号(132)


**black*不再强制在控制流语句后面放置空行
(90)


**black*现在拆分导入,如isort(127)的"mode 3+尾随逗号"

*固定注释独立注释关闭块时的缩进(16,32)


*修复了如果紧接着
类、def或decorator(56,#154)

*修复了`--diff`不显示整个路径(130)


*修复了在
函数调用(2)中星形和双星之后复杂表达式的解析

*修复了lambda参数(133)中逗号的无效拆分

*修复了三元表达式的缺失拆分(141)



18.4a2


*修复了未对齐的独立注释的解析(99,112)


*修复了字典解包在字典文本中的位置(111)

*vim插件现在可以在windows上工作,也

*修复了字符串(120)中遇到不必要的转义引号时的不稳定格式



18.4a1

*添加了`--quiet`(78)

*添加了自动括号管理(4)

*添加了[预提交](https://pre-commit.com)集成(103,#104)

*修复了使用多个文件(101,102)


*修复了从原始字符串(100,105)中删除反斜杠转义的问题




18.4a0

*添加了`--diff`(87)

*在所有分隔符之前添加换行符,逗号等情况除外,为了更好地遵守PEP 8(73)


*标准化字符串文字,以便在任何地方(几乎)使用双引号
(75)


*固定了对嵌套括号中的独立注释的处理
表达式;*黑色*将不再产生超长的行或将所有独立的注释放在表达式的末尾(22)


*修复了18.3a4回归:不要在带有
尾随空白(80)


*修复了18.3a4回归:` yapf:禁用`用法为尾随注释
将导致*black*在格式化多个文件时不发出文件的其余部分(95)


*当按下ctrl+c时,*black*不再
因一连串与异步相关的异常而异常

*函数(74)




18.3A4

*` fmt:off`和` fmt:on`中的空行被实现(5)


*自动检测不推荐使用的python 2格式的打印语句
和格式化文件(49)中的exec语句类型化
函数参数(60)

*默认值中的复杂表达式仅在使用--check(50)

*不从方括号索引中删除单个尾随逗号
(59)


*如果前一个因子叶不是算符(55)



*如果是第一个参数(46)


*如果是第一个参数(46)

*如果是第一个参数(46)


*如果是第一个参数(46)




*忽略[sphinx auto属性注释](http://www.sphinx-doc.org/en/稳定/ext/autodoc/autodoc.html/autodoc.html directive auto attribute)
(68)
/>*不要删除括号表达式之外的单个空行
(19)

*添加了从stdin到stdin的管道格式设置功能(25)

*恢复了使用"async"作为
名称(20,42)

*甚至更好地处理numpy样式数组的功能索引(33,再次)



\以下是[最近对PEP 8的更改](https://github.com/python/peps/commit/c59c4376ad233a62ca4b3a060c81368bd21e85b)
(21)


*拆分时忽略空括号对。这避免了非常奇怪的格式设置(34,35)


*如果调用只有一个参数,则删除后面的逗号

*如果顶级函数由注释分隔,不要在上面的函数后面放四行空行#28)

*修复了numpy样式数组索引中缺少的空间(33)


*修复了基于星的一元表达式(31)之后的虚假空间




18.3a1

*添加了"--check`

*仅在函数签名中放置尾随逗号,如果安全的话,才调用。如果文件是python 3.6+,它总是安全的,否则
只有在签名
或调用中没有使用"*args"或"**kwargs"时才安全。(8)

*修复了相对导入中的无效点间距(6,#13)

*修复了for循环中未压缩变量逗号后的无效拆分
(23)


*修复了带圆括号的集合表达式(7)中的假空格

*修复了打开圆括号后的假空格,默认情况下
参数(14,#17)

*修复了操作数为
复杂表达式(15)






*Alpha Quality

*日期版本(见:https://calver.org/)




[jelle zijlstra](邮箱:jelle.zijlstra@gmail.com)、
[mika naylor](邮箱:mail@autophagy.io)和
[zsolt dollenstein](邮箱:zsol.zsol@gmail.com).特鲁赫兹(mailto:eli@treuherz.com)
*hugo van kemenade
*[ivan katani奇](mailto:ivan.katanic@gmail.com)
*[jonas obrist](mailto:ojiidotch@gmail.com)
*[luka sterbic](mailto:luka.sterbic@gmail.com)
*[miguel gaiowski](mailto:miggaiowski@gmail.com)
*[miroslav舒伯内茨基(mailto:miroslav@miki725.com)
*[neraste](neraste.herr10@gmail.com)
*[osaetin daniel](mailto:osaetindaniel@gmail.com)
*[peter bengtsson](mailto:mail@peterbe.com)
*[stavros korokithakis](mailto:hi@stavros.io)
*[sunil kapil](mailto:snlkapil@gmail.com)
*[vishwas b sharma](邮箱:sharma.vishwas88@gmail.com)
*[chuck wooters](邮箱:chuck.wooters@microsoft.com)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java是否可以创建一个正则表达式来查找与模式不匹配的字符串?   使用“debugUnreturnedConnectionStackTraces”进行java调试连接丢失   java如何在openLDAP中禁用/启用用户帐户?   java无法从jsoup api获取某些类   java无法从APK提取XML文件   如何在linux命令行中替换多个文件中的字符串   java学生班。如何根据单位输入打印成绩?   java有没有办法将Struts配置为绑定null而不是空字符串?   python使用OpenCV[Java]检测简单几何形状   java文件。isFile()和文件。isDirectory()返回false   java Fetch有条件地加入hibernate,还是将实体设计更改为子实体上的条件Fetch?   java lombok@Data generated setter是否对成员对象(如映射)执行深度复制?   java如何使JLabel从下一行开始   java Gradle依赖解决了配置文件的问题