让你的Python代码实现类型提示功能


Posted in Python onNovember 19, 2019

Python是一种动态类型语言,这意味着我们在编写代码的时候更为自由,但是与此同时IDE无法向静态类型语言那样分析代码,及时给我们相应的提示。为了解决这个问题,Python 3.6 新增了几个特性PEP 484和PEP 526,帮助编辑器为我们提供更智能的提示。这些新特性不会影响语言本身,只是增加一点提示。当你使用比较智能的开发工具比如PyCHarm时,就会感觉到类型提示的方便之处。

变量注解

首先先看看变量注解。它的语法和某些类型后置的语言类似。

# 变量注解
a: int = 5
b: bool = True
f: float = 5.0
s: str = "abc"

声明类型之后,编辑器和IDE就会读取到这个类型注解,然后给予我们相应的提示。程序在运行的时候行为完全不变。

如果是自己编写的类,也可以用作变量注解。

class MyClass:
 def fun1(self):
  print("fun1")


me: MyClass = MyClass()
me.fun1()

对于较复杂的内置类型、泛型、生成器、自定义类型等,需要引入标准库typing。对于更复杂的类型,请直接参考typing标准库文档。

from typing import TypeVar, Iterable, Tuple, Dict, List

m: Dict[int, int] = {1: 1, 2: 2}
t: Tuple[int, ...] = (1, 2, 3)
l: List[int] = [1, 2, 3, 4]

函数注解

当使用Python编写复杂的函数时,我们常常为没有合适的提示而苦恼。函数注解可以帮助我们解决这个问题。

def add(a: int, b: int) -> int:
 return a + b

为函数添加注解之后,当我们调用这个函数的时候,编辑器就会给予对应的提示。当处理大型项目的时候,这个特性会很有用。

函数注解保存在函数的__annotations__属性中,如果你准备编写程序读取它,可以使用这个属性。

print(add.__annotations__)

以上这篇让你的Python代码实现类型提示功能就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python下rrdtool模块的基本使用方法
Nov 13 Python
利用Python脚本生成sitemap.xml的实现方法
Jan 31 Python
Python 实现链表实例代码
Apr 07 Python
python线程池threadpool使用篇
Apr 27 Python
Python中使用双下划线防止类属性被覆盖问题
Jun 27 Python
python实现socket+threading处理多连接的方法
Jul 23 Python
如何在Django配置文件里配置session链接
Aug 06 Python
通过celery异步处理一个查询任务的完整代码
Nov 19 Python
Django 项目布局方法(值得推荐)
Mar 22 Python
python 画条形图(柱状图)实例
Apr 24 Python
Django如何使用asyncio协程和ThreadPoolExecutor多线程
Oct 12 Python
python实现简单的聊天小程序
Jul 07 Python
wxPython实现分隔窗口
Nov 19 #Python
浅谈Python type的使用
Nov 19 #Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
Nov 19 #Python
Python算法的时间复杂度和空间复杂度(实例解析)
Nov 19 #Python
关于Flask项目无法使用公网IP访问的解决方式
Nov 19 #Python
Python算法中的时间复杂度问题
Nov 19 #Python
wxPython窗体拆分布局基础组件
Nov 19 #Python
You might like
php数组一对一替换实现代码
2012/08/31 PHP
php GUID生成函数和类
2014/03/10 PHP
CodeIgniter输出中文乱码的两种解决办法
2014/06/12 PHP
PHP 正则表达式常用函数
2014/08/17 PHP
帝国cms常用标签汇总
2015/07/06 PHP
尽可能写"友好"的"Javascript"代码
2007/01/09 Javascript
javascript Prototype 对象扩展
2009/05/15 Javascript
IE FF OPERA都可用的弹出层实现代码
2009/09/29 Javascript
Firefox中autocomplete="off" 设置不起作用Bug的解决方法
2011/03/25 Javascript
ASP.NET jQuery 实例2 (表单中使用回车在TextBox之间向下移动)
2012/01/13 Javascript
浅析return false的正确使用
2013/11/04 Javascript
node.js中的url.format方法使用说明
2014/12/10 Javascript
关于function类中定义变量this的简单说明
2016/05/28 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
2016/09/06 Javascript
jQuery右下角悬浮广告实例
2016/10/17 Javascript
原生js实现倒计时--2018
2017/02/21 Javascript
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
node.js用fs.rename强制重命名或移动文件夹的方法
2017/12/27 Javascript
Angular路由ui-router配置详解
2018/08/01 Javascript
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
2019/11/07 jQuery
vue.js 子组件无法获取父组件store值的解决方式
2019/11/08 Javascript
[49:13]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第一局
2016/02/27 DOTA
Python matplotlib 画图窗口显示到gui或者控制台的实例
2018/05/24 Python
python数据归一化及三种方法详解
2019/08/06 Python
Python函数参数定义及传递方式解析
2020/06/10 Python
PyQt5 QDockWidget控件应用详解
2020/08/12 Python
python openCV实现摄像头获取人脸图片
2020/08/20 Python
常用的四种CSS透明属性介绍
2014/04/12 HTML / CSS
演讲稿怎么写
2014/01/07 职场文书
班级寄语大全
2014/04/10 职场文书
《春雨》教学反思
2014/04/24 职场文书
预备党员转正意见
2015/06/01 职场文书
政审证明材料
2015/06/19 职场文书
年会邀请函的格式及范文五篇
2019/11/02 职场文书
Mysql中 unique列插入重复值该怎么解决呢
2021/05/26 MySQL
vue如何清除浏览器历史栈
2022/05/25 Vue.js