记住变量类型的三种方式

栏目: Python · 发布时间: 7年前

内容简介:记住变量类型的三种方式

Python作为一门动态语言,其变量的类型可以自由变化。这个特性提高了代码的开发效率,却也增加了阅读代码和维护代码的难度。

假设有一个变量 is_request_finished ,从名字上来看,这个变量的值应该为 True 或者 False ,在写代码的时候,最初也确实是这样定义的。但是可能由于某些原因,在某一次赋值的时候, is_request_finished = 'True' 。此时,如果代码的单元测试不够完善,那么 if is_request_finishedis_request_finished = Trueis_request_finished = 'True' 的时候都成立,问题被隐藏了。但是当 is_request_finished = 'False' 的时候,由于 'False' 作为一个非空字符串,就会使得 if is_request_finished 依然成立,从而使程序的行为发现异常。

单个变量的类型异常也许还容易发现,但是如果变量是放在字典或者列表里面,那就比较麻烦了。假设需要保存一段个人信息,于是创建了下面这样一个列表套字典的数据结构:

person_list = [{
        'name': 'kingname',
        'age': 23,
        'sex': 'male'
        'detail': {
                    'address': 'xxx',
                    'work': 'engineer',
                    'salary': 100000
            }
},
{
        'name': 'xiaoming',
        'age': 65,
        'sex': 'male'
        'detail': {
                    'address': 'yyy',
                    'work': 'pm',
                    'salary': 0.5
            }
}]

这种方式开发起来非常的快速而方便,但是其他人甚至是开发者自己在一段时间以后读代码,都会有一种想抽死自己的冲动。因为根本不知道这个变量里面保存的是什么东西。

针对以上问题,常见的解决办法有三种。

Type Hints 与 Variable Annotations

PEP 484 中,引入了Type Hints,在 PEP 526 中引入了Variable Annotations。它使得 Python 3.6及以后的Python 代码拥有了“声明”变量类型的能力。这里的“声明”之所以会打引号,是因为这个声明是给IDE和人看的。这个声明对 Python 的解释器无效。

Type Hints

PyCharm现在已经可以比较好地支持Type Hints了。例如下面这一段代码:

def upload(url):
    print(f'now upload a file to {url}')
    return True

模拟一段上传文件的函数,上传成功以后返回True。接收一个参数 url 。在正常情况下,这个 url 应该是一个字符串。于是,使用Type Hints,代码可以变为:

def upload(url: str)-> bool:
    print(f'now upload a file to {url}')
    return True

如果直接运行,其运行效果如下图所示:

记住变量类型的三种方式

现在假设传递一个不是字符串的变量给 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,可以参阅它的官方文档: Mypy documentation

docstring

在docstring来标注变量的类型,如下图所示:

记住变量类型的三种方式

这种写法可以用来提示一个函数,或者一个类它里面的各个变量的情况。但是详细程度需要看开发者有没有耐心把这个注释写清楚。

Bean

这种方法来自与Java Bean的思想,它主要用来解决列表套字典,字典套字典,字典套列表,列表套列表这种深层的嵌套关系。关于这个方法,请参阅另一篇文章: 可爱的豆子——使用Beans思想让Python代码更易维护


以上所述就是小编给大家介绍的《记住变量类型的三种方式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

中国制造2025:产业互联网开启新工业革命

中国制造2025:产业互联网开启新工业革命

夏妍娜、赵胜 / 机械工业出版社 / 2016-2-22 / 49.00

过去20年,是中国消费互联网肆意生长的"黄金20年",诞生了诸如BAT等互联网巨头,而时至今日,风口正逐渐转向了产业互联网。互联网这一摧枯拉朽的飓风,在改造了消费服务业之后,正快速而坚定地横扫工业领域,拉开了产业互联网"关键30年"的大幕。 "中国制造2025"规划,恰是中国政府在新一轮产业革命浪潮中做出的积极举措,是在"新常态"和"供给侧改革"的背景下,强调制造业在中国经济中的基础作用,认......一起来看看 《中国制造2025:产业互联网开启新工业革命》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试