首页 > Python资料 博客日记
在 Python 中强制要求“声明”变量
2025-01-03 13:30:02Python资料围观42次
最近发布了一个玩具包 variable-declaration-checker
:https://pypi.org/project/variable-declaration-checker/
它是一个 Pylint 插件,要求必须要对变量进行“声明”或者“定义”。
Python 是一个非常自由的语言。和其他很多语言不同,它不需要对变量进行声明就可使用:
a = 1
print(a)
而在比如 C# 中,我们必须先 int a
才可以在之后的代码中使用 a
这个名称:
int a;
a = 1; // 当然,可以并到一行: int a = 1 ,但总之不能莫名其妙蹦出一个 a 来。
Console.WriteLine(a);
即使是同为脚本语言的 JavaScript 也需要 let
或者 var
等语句来定义变量。
相比之下, Python 确实非常自由。但这也会带来一些问题,请看这段代码:
contains_1000000 = False
for i in [100000000, 10000000, 1000000, 100000]:
if i == 1000000:
contains_10000000 = True
print(contains_1000000)
它会输出 False ,因为循环里那个变量名打错了。
好吧,这大概不是一个好例子,但我现在一时间想不出更好的了。总之意思就是,我可能会只是因为不小心敲到一下键盘,就莫名其妙定义一个新变量,还不能得到任何的错误提示!
这实在是不能接受的,非常缺乏安全感。因此我就做了这样一个玩具包。对以上的代码,它会输出:
main.py:1:0: W5901: Declare the variable with type annotation. (un-declared-variable)
main.py:2:4: W5901: Declare the variable with type annotation. (un-declared-variable)
main.py:4:8: W5901: Declare the variable with type annotation. (un-declared-variable)
其中第一个和第二个是因为我们的变量 contains_1000000
和 i
都没有进行过“声明”,而第三个就是因为我们错误地使用了新的名称。
由于 Python 并没有声明语句,我们将类型标注借用过来,视为所谓的“声明”:
import typing
contains_1000000: bool = False
i: typing.Any
for i in [100000000, 10000000, 1000000, 100000]:
if i == 1000000:
contains_1000000 = True
print(contains_1000000)
这样就可以修复前面的警告了。
除此之外,我们还禁止了对同一个变量进行多次标注,以防止使用“一键改名”等功能后带来的混乱:
import typing
contains_1000000: bool = False
i: typing.Any
for i in [100000000, 10000000, 1000000, 100000]:
if i == 1000000:
contains_1000000: bool = True # W5902: Rename the variable or remove the type annotation. (re-declared-variable)
print(contains_1000000)
如果感觉这个包还不错,想要试试看,可以使用 pip install variable-declaration-checker
进行安装,它会同时自动安装 Pylint 。
如果使用命令行,可以这样进行检查:
pylint main.py --load-plugins=variable_declaration_checker
若要忽略其他检查:
pylint main.py --load-plugins=variable_declaration_checker --disable=all --enable=un-declared-variable --enable=re-declared-variable
如果想要实时看到警告,这边以 Visual Studio Code 为例:
-
安装 VSCode 的 Pylint 插件
-
配置如下:
"pylint.importStrategy": "fromEnvironment", "pylint.args": [ "--load-plugins=variable_declaration_checker", "--disable=all", // 如果想保留 Pylint 自带的检查器的话,就把这边三行去掉 "--enable=un-declared-variable", "--enable=re-declared-variable" ]
-
在所使用的 Python 环境中安装
pip install variable-declaration-checker
这样就可以在 VSCode 里看到警告了。
其他的开发环境,只要支持 Pylint 一般都可以类似地进行配置和使用。
标签:
相关文章
最新发布
- 华为OD机试E卷 --流浪地球--24年OD统一考试(Java & JS & Python & C & C++)
- Python 3.7-3.11版本dlib库快速安装指南
- python 更换pip源
- 华为OD机试E卷 --恢复数字序列--24年OD统一考试(Java & JS & Python & C & C++)
- 华为OD机试E卷 --选修课--24年OD统一考试(Java & JS & Python & C & C++)
- python SQLAlchemy ORM——从零开始学习 01 安装库
- Python 入门教程(2)搭建环境 | 2.3、VSCode配置Python开发环境
- Django 3 Web应用开发实战PDF、EPUB免费下载
- Python的元组和字典知识点(超详细教学)
- 小波变换算法详解(附Python和C++代码)
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Anaconda版本和Python版本对应关系(持续更新...)
- Python与PyTorch的版本对应
- Windows上安装 Python 环境并配置环境变量 (超详细教程)
- Python pyinstaller打包exe最完整教程