首页 > Python资料 博客日记

在 Python 中强制要求“声明”变量

2025-01-03 13:30:02Python资料围观42

这篇文章介绍了在 Python 中强制要求“声明”变量,分享给大家做个参考,收藏Python资料网收获更多编程知识

最近发布了一个玩具包 variable-declaration-checkerhttps://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_1000000i 都没有进行过“声明”,而第三个就是因为我们错误地使用了新的名称。

由于 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 为例:

  1. 安装 VSCode 的 Pylint 插件

  2. 配置如下:

    "pylint.importStrategy": "fromEnvironment",
    "pylint.args": [
    	"--load-plugins=variable_declaration_checker",
    	"--disable=all",  // 如果想保留 Pylint 自带的检查器的话,就把这边三行去掉
    	"--enable=un-declared-variable",
    	"--enable=re-declared-variable"
    ]
    
  3. 在所使用的 Python 环境中安装 pip install variable-declaration-checker

这样就可以在 VSCode 里看到警告了。

其他的开发环境,只要支持 Pylint 一般都可以类似地进行配置和使用。


版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐