前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >开源图书《Python完全自学教程》7.1.4不检查类型

开源图书《Python完全自学教程》7.1.4不检查类型

作者头像
老齐
发布2022-07-06 15:58:47
2090
发布2022-07-06 15:58:47
举报
文章被收录于专栏:老齐教室

7.1.4 不检查类型

读者是否发现,在前述所写过的函数中,对参数的类型——形参应该引用什么类型的实参——没有要求声明,也没有在函数中检查类型。比如编写一个实现加法的函数:

代码语言:javascript
复制
>>> def add(x, y): return x+y
...

因为在函数体内只有一条语句,所以可以写成一行。

用下面的方式调用此函数:

代码语言:javascript
复制
>>> add(3, 4)
7
>>> add('learn', 'python')
'learnpython'
>>> add([1,2,3], [4,5,6])
[1, 2, 3, 4, 5, 6]

分别让 add() 的形参 x, y 引用了不同类型的 Python 对象,只要它们能够执行 “ + ” 运算符,函数就能正常执行,且返回值的类型也各不相同。这就是 Python 中函数的特点(这种特征在第8章8.6节会深入探讨):

  • 在定义函数的时候,不强制要求形参类型和返回值类型;
  • 在调用函数的时候,不强制检查实参类型。

当然,这个特点有时候会带来一点点麻烦,比如:

代码语言:javascript
复制
>>> add(4, 'book')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in add
TypeError: unsupported operand type(s) for +: 'int' and 'str'

由于不强制参数类型,如果按照上述方式调用函数,就会报出异常。此类问题将运用第10章10.2节中所介绍的方法给予处理。

Python 为了照顾有其他编程语言习惯的开发者,以及“追求明确的强迫症”开发者,允许在定义函数的时候,对参数和函数返回值的类型给予说明。

代码语言:javascript
复制
>>> def new_add(x:int, y:int)->int:
...     return x + y
...
>>> new_add(2, 4)
6

但是,这也只是“君子协定”和必要注释,旨在告知或者提醒开发者,而非强制执行,即使不遵守“君子协定”,只要符合 Python 语法,也依然“通行无阻”。

代码语言:javascript
复制
>>> new_add('book', 'python')
'bookpython'

更甚者,还可以在定义函数时用类似形式对各参数及返回值给予更多注释,这并非总是画蛇添足,例如:

代码语言:javascript
复制
>>> def kinetic_energy(m:'in kg', v:'in m/s')->'Joules':
...     return (m*v**2)/2
...
>>> kinetic_energy(10, 2)
20.0

这里定义了一个计算物体动能的函数 kinetic_energy() 。在物理量的计算中,特别强调单位。在定义此函数时,就以 m:'in kg' 的方式明确声明物体质量的单位——虽然也不是强制,但是提醒使用此函数的人,只有按照此处规定的单位制,才得到以焦耳( Joules )为单位的动能。

最后声明,是否要在函数中使用上述形式注释,根据具体情形而定。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老齐教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 7.1.4 不检查类型
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档