记住 Python 变量类型的三种方式
2017-06-11 17:05
459 查看
title: 记住变量类型的三种方式
date: 2017-06-11 15:25:03
tags: ['Python']
category: ['Python']
toc: true
comments: true
---
Python作为一门动态语言,其变量的类型可以自由变化。这个特性提高了代码的开发效率,却也增加了阅读代码和维护代码的难度。
假设有一个变量
单个变量的类型异常也许还容易发现,但是如果变量是放在字典或者列表里面,那就比较麻烦了。假设需要保存一段个人信息,于是创建了下面这样一个列表套字典的数据结构:
这种方式开发起来非常的快速而方便,但是其他人甚至是开发者自己在一段时间以后读代码,都会有一种想抽死自己的冲动。因为根本不知道这个变量里面保存的是什么东西。
针对以上问题,常见的解决办法有三种。
模拟一段上传文件的函数,上传成功以后返回True。接收一个参数
如果直接运行,其运行效果如下图所示:
现在假设传递一个不是字符串的变量给
但提示归提示,强行运行也是没有问题的。这就说明Type Hints主要是给IDE和人用的,解释器并不会关心类型正不正确。
如果修改这个函数的返回值,让它不返回
Type Hints的官方文档,可以参阅:typing — Support for type hints
除了这种写法外,Variable Annotations还支持把类型写在注释中,如下图所示:
虽然PyCharm不能起到很好的提示作用,但是可以使用一个第三方库
关于Variable Annotations的更多用法,可以参阅:Syntax for Variable Annotations
关于Mypy,可以参阅它的官方文档:Mypy documentation
这种写法可以用来提示一个函数,或者一个类它里面的各个变量的情况。但是详细程度需要看开发者有没有耐心把这个注释写清楚。
date: 2017-06-11 15:25:03
tags: ['Python']
category: ['Python']
toc: true
comments: true
---
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依然成立,从而使程序的行为发现异常。
单个变量的类型异常也许还容易发现,但是如果变量是放在字典或者列表里面,那就比较麻烦了。假设需要保存一段个人信息,于是创建了下面这样一个列表套字典的数据结构:
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代码更易维护相关文章推荐
- 记住 Python 变量类型的三种方式
- PHP判断变量类型和类型转换的三种方式
- 初窥Python(四)——三种方法判断python变量类型
- Python--前端基础之JavaScript(JS的引入方式,JS的变量、常量和标识符,JS的数据类型,运算符,流程控制,JavaScript的对象)
- Python获取脚本路径(三种方式)
- JavaScript声明全局变量三种方式的异同javascript
- JavaScript声明全局变量三种方式的异同
- python中如何判断一个变量的数据类型
- python中如何判断一个变量的数据类型?(原创)
- Python变量和对象类型速记手册
- Python 判断变量的数据类型
- 从C#到Python —— 1 变量和数据类型
- python 变量命名规范及变量类型总结
- 浅析iPhone平台三种应用类型的布局方式
- iOS平台三种应用类型的布局方式
- Apache下运行Python WEB Applications的三种方式
- 转载:LINUX设置环境变量的三种方式
- C语言各种类型变量存储方式
- Python 入门(2)--数据类型和变量
- 浅析iPhone平台三种应用类型的布局方式 推荐