Python受欢迎的原因之一就是其计算生态丰富,据不完全统计,Python 目前为止有约13万+的第三方库。
本系列将会陆续整理分享一些有趣、有用的第三方库。
-
通过百度网盘获取:
链接:https://pan.baidu.com/s/1FSGLd7aI_UQlCQuovVHc_Q?pwd=mnsj提取码:mnsj
-
前往GitHub获取:
https://github.com/returu/Python_Ecosystem
https://black.readthedocs.io/en/stable/the_black_code_style/index.html
pip install black
pip install "black[jupyter]"
https://github.com/psf/black
-
1. 格式化文件
使用以下命令 Black 会直接在原地重新格式化文件。
black {source_file_or_directory}
black 会直接修改目标文件,将其格式化为符合其规范的形式。black 会递归地格式化该目录下的所有 Python 脚本文件。-
2. 命令行选项
-
-l, –line-length:
-
-t, –target-version
-
-S, –skip-string-normalization
-
–check
如果不想直接修改文件,而是想检查代码是否已经符合 black 的格式规范,可以使用 --check 选项。
>>> black --check project_directory/
would reformat F:Black——代码格式化工具project_directoryexample_2.py
would reformat F:Black——代码格式化工具project_directoryexample.py
Oh no! 💥 💔 💥
2 files would be reformatted.
-
–diff
>>> black --diff --color project_directory/example_2.py
--- project_directoryexample_2.py 2025-03-08 06:39:49.490746+00:00
+++ project_directoryexample_2.py 2025-03-08 07:53:13.698914+00:00
@@ -1,6 +1,3 @@
-list = [3,
- 4,
- 5
- ]
-for i,v in enumerate(list):
- print(f"No.{i} is {v}")
No newline at end of file
+list = [3, 4, 5]
+for i, v in enumerate(list):
+ print(f"No.{i} is {v}")
would reformat project_directoryexample_2.py
All done! ✨ 🍰 ✨
1 file would be reformatted.
-
–line-ranges
-
–exclude
-
–extend-exclude
-
—include
-
-q, –quiet
-
-v, –verbose
--verbose 选项可以显示详细的格式化信息,包括哪些文件被修改等信息。>>> black --verbose project_directory/
Identified `F:` as project root containing a file system root.
Found input source directory: "F:Black——代码格式化工具project_directory"
reformatted F:Black——代码格式化工具project_directoryexample_2.py
reformatted F:Black——代码格式化工具project_directoryexample.py
All done! ✨ 🍰 ✨
2 files reformatted.
-
3、pyproject.toml 文件配置
[tool.black]
line-length = 88
target-version = ['py37']
include = '.pyi?$'
# 'extend-exclude' 在默认值的基础上额外排除文件或目录
extend-exclude = '''
# 以 ^/ 开头的正则表达式仅适用于项目根目录中的文件和目录
(
^/foo.py # 排除项目根目录中名为 foo.py 的文件
| .*_pb2.py # 排除项目中任何位置的自动生成的 Protocol Buffer 文件
)
'''
除了在命令行中使用,还可以在 Python 脚本中调用 black 的 API 来格式化代码。
-
black.format_file_contents:
black.format_file_contents(src_contents: str,fast: bool,mode: black.FileMode) -> str
-
src_contents:需要格式化的代码字符串。 -
fast:是否启用快速模式。为False(默认)时会执行完整的安全性检查,确保格式化后的代码与原始代码逻辑等价。当为True时跳过代码的安全性检查(AST 检查),可能会更快,但不安全。 -
mode:配置格式化的行为。
import black
source_code = """
def function(x:int,
y:int
):
result=x ** y
print(f' Result : { result }')
a=2
b=3
function(a,b)
"""
# 配置格式化选项
mode = black.Mode(
line_length=20, # 指定每行代码的最大长度
string_normalization=False # 是否对字符串进行规范化处理
)
# 格式化代码
formatted_code = black.format_file_contents(source_code, fast=False, mode=mode)
print(formatted_code)
# 输出:格式化后的代码
def function(
x: int, y: int
):
result = x**y
print(
f' Result : { result }'
)
a = 2
b = 3
function(a, b)
-
black.format_file_in_place:
black.format_file_in_place(src: str,fast: bool,mode: black.FileMode,write_back: black.WriteBack) -> bool
-
src:要格式化的文件路径。 -
fast:是否启用快速模式。为False(默认)时会执行完整的安全性检查,确保格式化后的代码与原始代码逻辑等价。当为True时跳过代码的安全性检查(AST 检查),可能会更快,但不安全。 -
mode:配置格式化的行为。 -
write_back:控制是否将格式化后的代码写回文件。当设置为black.WriteBack.YES时,会将格式化后的代码写回文件;当设置为black.WriteBack.NO时,不写回文件,仅返回是否需要格式化;当设置为black.WriteBack.DIFF时,生成并返回格式化后的代码与原始代码的差异(diff)。
以下是一个简单的示例:
import black
from pathlib import Path
# 文件路径
file_path = Path("project_directory/example.py")
# 自定义格式化选项
mode = black.Mode(
line_length=100, # 设置行长度为 100
target_versions={black.TargetVersion.PY38}, # 目标 Python 版本
)
# 格式化文件
formatted_code = black.format_file_in_place(file_path, fast=False, mode=mode,write_back=black.WriteBack.YES)
print(formatted_code)
# 输出:True
更多内容可以前往官方文档查看:
https://black.readthedocs.io/en/stable/


本篇文章来源于微信公众号: 码农设计师
