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

    文章

    573

    浏览量

    40129
  • 变量
    +关注

    关注

    0

    文章

    613

    浏览量

    28366
  • python
    +关注

    关注

    56

    文章

    4797

    浏览量

    84674

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    三种常见的PCB错误是什么

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

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

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

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

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

    Flash锁死的解决办法是什么

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

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

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

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

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

    linux设置环境变量三种方式

     linux设置环境变量以下三种方式
    发表于 06-15 09:05 1421次阅读
    linux设置环境<b class='flag-5'>变量</b>的<b class='flag-5'>三种</b>方式

    伺服电机的三种操控办法

    通常伺服电机首要有三种操控办法,即速度操控办法,转矩操控办法和方位操控办法,下面别离对每种操控办法
    的头像 发表于 09-26 10:16 7713次阅读

    针对iPhone12信号问题,苹果给出三种解决办法

    解决办法。对于这种情况,苹果官方客服是怎么回应的呢?他们给出了三种可能解决的办法,但目前来看仅仅是可能而已,另外对于无服务的现象,他们也有自己的解读。
    的头像 发表于 11-10 18:01 4.6w次阅读

    VGA线太短的解决办法

    针对视频传输的线缆,延长无非就是2办法,一是换一个更长的线,另一加一个延长器。我们在这里3
    的头像 发表于 01-09 09:53 6794次阅读
    VGA线太短的<b class='flag-5'>解决办法</b>

    python统计词频的三种方法

    python统计词频的三种方法方法。
    发表于 05-25 14:33 2次下载

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

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

    常见MCU故障及解决办法

    微控制器单元(MCU)是现代电子设备中的核心组件,负责处理和控制各种功能。然而,由于各种原因,MCU可能会出现故障。以下是一些常见的MCU故障及其解决办法: 1. 电源问题 故障现象: MCU无法
    的头像 发表于 11-01 13:41 1728次阅读

    常见垫圈故障及解决办法 防漏垫圈的设计与应用

    常见垫圈故障及解决办法 1. 垫圈老化 故障现象: 垫圈因长时间使用而老化,失去弹性,导致密封性能下降。 解决办法: 定期检查垫圈的老化情况,及时更换新的垫圈。 2. 垫圈变形 故障现象: 由于安装
    的头像 发表于 12-12 15:31 263次阅读