社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

详解Python中函数和模块的特殊属性__annotations__

Python小屋 • 4 年前 • 295 次点击  

封面图片:

《Python程序设计开发宝典》(ISBN:9787302472100),董付国,清华大学出版社,2017

图书详情:

用书老师可以联系出版社或董老师获取配套PPT、源码。

============

众所周知,Python是一种动态类型语言,也是强类型语言。在Python语言中,使用变量之前不需要声明其类型,直接赋值即可创建变量,变量初始类型取决于等号右侧表达式的值的类型。创建之后,变量的类型可以随时发生变化,但在任何时刻,每个变量都有确定的类型。


同理,在定义函数和类的方法时,也不需要声明形参类型,完全取决于实参类型。例如,

很多从其他语言转过来的朋友很不习惯这样的方式,还是习惯于声明变量和参数的类型。虽然Python不支持声明,但是允许在定义函数时使用“注解”的形式来标注形参和返回值的类型,但这种注解的形式并不会对形参进行任何约束和检查,在实际调用函数时,即使实参不符合形参的类型标注,一样能够正常传递,这一点在《Python程序设计开发宝典》(董付国著,清华大学出版社)第126页有介绍。例如,

在Python中,函数会维护一个特殊属性__annotations__,这是一个字典,其中的“键”是被注解的形参名,“值”为注解的内容。使用时并不要求注解的内容是Python中的类型,可以是任意内容。例如,

Python函数有若干特殊属性,常用的几个如下图箭头所示,倒数第二个为__annotations__,

从官方文档来看,函数的__annotations__属性只包含形参和返回值的注解,即使在函数体中有类似的注解,但这并不等价于C语言中的变量声明,这样的注解不会创建变量,也不会被收集到这个特殊属性__annotations__中。例如,

另外,在模块中也有个特殊属性__annotations__用于收集模块中变量的注解,但这些注解同样也不会创建对应的变量。例如,在下面的代码中,并没有创建变量e、f、g。

Python官方文档对于模块特殊属性__annotations__的解释如下:

启动IDLE时,默认进入交互模式,是一个叫做__main__的命名空间,官方文档解释如下:

这样的话,在交互模式中也是可以访问特殊属性__annotations__的。例如,

以上分析源自于中国传媒大学胡凤国老师的一位学生提交的作业,代码如下,这应该是在交互模式下执行代码后复制到程序文件中删除前导提示符“>>> ”之后得到的,但这个程序却能够正确运行(注意:其中的冒号是英文半角符号)。有了上面的分析,这个程序能够正常运行也就容易理解了。感谢胡老师提供这样一个有意思的话题,感谢汪依妮同学无意中发现这样一个有意思的现象,感谢武汉理工大学赵广辉老师在群里积极交流并提出很好的思路。



温馨提示
关注本公众号“Python小屋”,通过菜单“最新资源”==>“历史文章”可以快速查看分专题的950篇原创技术文章列表(可根据关键字在页面上搜索感兴趣的文章),通过“最新资源”==>“微课专区”可以免费观看500节Python微课,通过“最新资源”==>“培训动态”可以查看近期Python培训安排,通过“最新资源”==>“教学资源”可以查看Python教学资源,海量宝藏等你来挖掘
---董付国老师Python系列图书---
友情提示:不建议购买太多,最好先通过京东、当当、天猫查阅图书了解目录和侧重点,然后再选择购买适合自己的书。
(1)《Python程序设计(第2版)》(ISBN:978-7-302-43651-5),清华大学出版社,2016年8月出版,2019年度清华大学出版社畅销图书
(2)《Python可以这样学》(ISBN:978-7-302-45646-9),清华大学出版社,2017年2月
(3)《Python程序设计基础(第2版)》(ISBN:978-7-302-49056-2)清华大学出版社,2018年1月出版,2019年度清华大学出版社畅销图书
(4)《中学生可以这样学Python》(ISBN:978-7-302-48039-6)清华大学出版社
(5)《Python程序设计开发宝典》(ISBN:978-7-302-47210-0)清华大学出版社,2018年10月
(6)《玩转Python轻松过二级》(ISBN:978-7-302-49916-9)清华大学出版社,2018年5月
(7)《Python程序设计基础与应用(ISBN:978-7-111-60617-8),机械工业出版社,2018年9月
(8)Python程序设计实验指导书》(ISBN:9787302525790),清华大学出版社,2019年4月
(9)《Python编程基础与案例集锦(中学版)(ISBN:978-7-121-35539-4),电子工业出版社,2019年4月
(10)大数据的Python基础》(ISBN:978-7-111-62455-4),机械工业出版社,预计2019年5月出版
(11)译作《Python程序设计》,机械工业出版社(华章),2018年11月出版
(12)繁体版《Python也可以这样学》,台湾博硕文化股份有限公司,2017年10月出版,本书为《Python可以这样学》在台湾发行的繁体版,两本书内容一样,不建议重复购买
(13)《Python程序设计实例教程》(ISBN:978-7-111-63198-9),机械工业出版社
(14)《Python数据分析、挖掘与可视化》(ISBN:978-7-115-52361-7),人民邮电出版社,2019年12月

Python相关课程教材选用参考与建议
董付国老师Python在线课程资源使用方法
董付国老师6本Python教材PDF版免费阅读
《Python数据分析、挖掘与可视化》前3章书稿PDF免费阅读
《Python程序设计基础与应用》前3章书稿PDF免费阅读
号外号外--Python小屋刷题神器上线啦
《中学生可以这样学Python》84节微课免费观看地址

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/56843
 
295 次点击