Python变量很难记?常见的解决办法有三种

python作为一门动态语言,其变量的类型可以自由变化。这个特性提高了代码的开发效率,却也增加了阅读代码和维护代码的难度。
假设有一个变量is_request_finished,从名字上来看,这个变量的值应该为true或者false,在写代码的时候,最初也确实是这样定义的。但是可能由于某些原因,在某一次赋值的时候,is_request_finished = 'true'。此时,如果代码的单元测试不够完善,那么if is_request_finished在is_request_finished = true和is_request_finished = 'true'的时候都成立,问题被隐藏了。但是当is_request_finished = 'false'的时候,由于'false'作为一个非空字符串,就会使得if is_request_finished依然成立,从而使程序的行为发现异常。
单个变量的类型异常也许还容易发现,但是如果变量是放在字典或者列表里面,那就比较麻烦了。假设需要保存一段个人信息,于是创建了下面这样一个列表套字典的数据结构:
这种方式开发起来非常的快速而方便,但是其他人甚至是开发者自己在一段时间以后读代码,都会有一种想抽死自己的冲动。因为根本不知道这个变量里面保存的是什么东西。
针对以上问题,常见的解决办法有三种。
type hints 与 variable annotations
在pep 484中,引入了type hints,在pep 526中引入了variable annotations。它使得python 3.6及以后的python 代码拥有了“声明”变量类型的能力。这里的“声明”之所以会打引号,是因为这个声明是给ide和人看的。这个声明对 python 的解释器无效。
type hints
pycharm现在已经可以比较好地支持type hints了。例如下面这一段代码:
模拟一段上传文件的函数,上传成功以后返回true。接收一个参数url。在正常情况下,这个url应该是一个字符串。于是,使用type hints,代码可以变为:
如果直接运行,其运行效果如下图所示:
现在假设传递一个不是字符串的变量给upload函数,此时pycharm就会提示类型有问题,如下图所示:
但提示归提示,强行运行也是没有问题的。这就说明type hints主要是给ide和人用的,解释器并不会关心类型正不正确。
如果修改这个函数的返回值,让它不返回true或者false,pycharm 也会发出警告:
type hints的官方文档,可以参阅:typing —support for type hints
variable annotations
对于variable annotations,如下图所示,虽然目前pycharm还不能很好地提示变量类型不对,但是人在读代码的时候,还是会起到一定的帮助。
除了这种写法外,variable annotations还支持把类型写在注释中,如下图所示:
虽然pycharm不能起到很好的提示作用,但是可以使用一个第三方库mypy来对代码做静态检查,其运行效果如下图所示,可以发现赋值的类型与声明的类型不一致(expression has type “str”, variable has type “bool”, 表达式的类型为“str”,变量的类型是“bool”)。
关于variable annotations的更多用法,可以参阅:syntax for variable annotations关于mypy,可以参阅它的官方文档。
docstring
在docstring来标注变量的类型,如下图所示:
这种写法可以用来提示一个函数,或者一个类它里面的各个变量的情况。但是详细程度需要看开发者有没有耐心把这个注释写清楚。
bean
这种方法来自与java bean的思想,它主要用来解决列表套字典,字典套字典,字典套列表,列表套列表这种深层的嵌套关系。

千元机之战!红米note4x和360N5,你更看好谁?
降压型DC/DC控制器LTC3865/-1的功能特性及适用范围
Wi-Fi6都还没普及,Wi-Fi7的研发已在路上
骨传导蓝牙耳机排行榜10强(前十名)
二次回路故障查找方法
Python变量很难记?常见的解决办法有三种
介绍AWorksLP基于FatFs的SD卡的基本用法
GSM/GPRS通信在配电自动化系统中的应用
全自动插拔力试验机的应用及优势
TikTok究竟取得了怎样的成绩呢?为什么被川普政府盯上了?
PESD12VL1BA 双向ESD二极管品牌 东沃DOWO
苹果13预计有8款配色
苹果在WWDC 2017敢将旧貌换新颜! App Store全新设计值得期待
北斗卫星 | 国产化北斗专用芯片样机的设计与实现
电源插座安装步骤及注意事项
人工智能在预防欺诈与消费者体验中起到了重要作用
D类功放有哪些优缺点
简要分析贴片电感为何兼容伍尔特电感744778004
WIFI天线信号增强器的制作
激光切割机常见故障以及解决方案