0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

马哥Linux运维 来源:未知 作者:李倩 2018-09-30 09:10 次阅读

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的思想,它主要用来解决列表套字典,字典套字典,字典套列表,列表套列表这种深层的嵌套关系。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据结构
    +关注

    关注

    3

    文章

    564

    浏览量

    39899
  • 变量
    +关注

    关注

    0

    文章

    595

    浏览量

    28112
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83466

原文标题:Python变量很难记?记住变量类型的三种方式

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Python中文注释保存出错解决办法

    本帖最后由 windworld 于 2016-1-25 18:02 编辑 使用Python2.7时,全部英文运行没有问题,中文或是注释中包含中文就运行不过去,也无法保存,具体问题原因和解决办法
    发表于 01-25 17:50

    GE DASH3000 监护仪三种常见故障解决办法

    01故障现象一:重复开机自检。故障分析:此现象是购机不久后使用中出现的。原因是此款仪器自动记录数据的功能,却没有自动清除数据的功能,当存储器存满数据而又没有清除时,便会出现此现象。解决办法
    发表于 09-21 15:21

    Python中文乱码怎么处理?python中文乱码解决办法

    默认使用utf-8编码,所以可以正常解析中文,无需指定 UTF-8 编码。注意:如果你使用编辑器,同时需要设置 py 文件存储的格式为 UTF-8,否则会出现类似错误信息。具体解决办法:1. 进入
    发表于 12-27 15:13

    三种访问过程映像的方法

    硬实时的需求。用户可以通过python等高级语言编写程序,并且可以通过存储器中的过程映像便捷的写入或者读取所有当前过程值。本文将介绍从过程映像中访问数据的三种方法:直接从文件中读取、ioctl以及
    发表于 02-02 16:40

    三种常见的PCB错误是什么

    三种常见的PCB错误是什么
    发表于 03-12 06:29

    常见三种无线接入方式是什么?

    蓝牙无线组网的优点是什么?常见三种无线接入方式是什么?蓝牙无线组网原理与上网方案分享
    发表于 05-26 06:33

    一体化伺服电机出现的常见问题哪些?什么解决办法

    什么是一体化伺服电机?一体化伺服电机出现的常见问题哪些?什么解决办法
    发表于 06-28 08:51

    交流伺服电机飞车常见问题哪些解决办法

    交流伺服电机飞车常见问题哪些解决办法
    发表于 09-26 09:08

    Flash锁死的解决办法是什么

    怎样去选择STM32的三种启动方式呢?Flash锁死的解决办法是什么?
    发表于 01-18 07:11

    打印机常见问题及解决办法

    打印机常见问题及解决办法 1、激光打印机预热超过2min或定形不牢,文字脱落。 一是考虑室内温度是否达20℃以上; 二是检查
    发表于 01-14 10:53 559次阅读

    DLP大幕显示墙常见问题及解决办法

    DLP大幕显示墙常见问题及解决办法 DLP大屏幕显示墙系统在电力、公安指挥中心、交通监控管理、工业生产调度,监测控制等
    发表于 02-21 16:49 586次阅读

    声卡硬件维修的常见问题及解决办法

    声卡硬件维修的常见问题及解决办法 常见故障一:声卡无声   出现这种故障常见的原因有:
    发表于 02-23 14:25 2407次阅读

    Matlab编程常见错误与解决办法

    Matlab编程常见错误与解决办法求人不如求己
    发表于 03-16 15:58 0次下载

    总结:30个单片机常见问题解决办法

    总结:30个单片机常见问题解决办法
    的头像 发表于 10-17 17:46 2408次阅读
    总结:30个单片机<b class='flag-5'>常见问题解决办法</b>!

    单片机常见问题的解决思路和解决办法

    30个单片机常见问题解决办法
    的头像 发表于 09-18 16:51 1641次阅读
    单片机<b class='flag-5'>常见</b>问题的解决思路和<b class='flag-5'>解决办法</b>