Python函数参数中的冒号与箭头

摘要:
在一些Python的工程项目中,我们会看到函数参数中会有冒号,有的函数后面会跟着一个箭头,你可能会疑惑,这些都是什么东西?其实函数参数中的冒号是参数的类型建议符,告诉程序员希望传入的实参的类型。下面我们以一个简单的函数twoSum为例,该函数计算的是两个输入参数的和:#!参考链接:1python函数注释,参数后面加冒号:,函数后面的箭头→是什么?

在一些Python的工程项目中,我们会看到函数参数中会有冒号,有的函数后面会跟着一个箭头,你可能会疑惑,这些都是什么东西?

其实函数参数中的冒号是参数的类型建议符,告诉程序员希望传入的实参的类型函数后面跟着的箭头是函数返回值的类型建议符,用来说明该函数返回的值是什么类型

更官方的解释:此为type hints,是Python 3.5新加的功能,作用如上所述,官方文档为https://www.python.org/dev/peps/pep-0484/

值得注意的是,类型建议符并非强制规定和检查,也就是说即使传入的实际参数与建议参数不符,也不会报错。我认为类型建议符的作用更多的体现在软件工程方面:在多人合作的时候,我们对他人开发的代码并不熟悉,没有对类型的解释说明的话,往往需要花费更多的时间才能看出函数的参数和返回值是什么类型,有了说明符,可以方便程序员理解函数的输入与输出(具体涉及到的工作,比如静态分析与代码重构)。

下面我们以一个简单的函数twoSum为例,该函数计算的是两个输入参数的和:

#!/usr/bin/python3
#-*- coding:utf-8 -*-
def twoSum(num1: int, num2: int=100) ->int:
    sum = num1 +num2
    returnsum
if __name__ == "__main__":
    print(twoSum.__annotations__)
    print(twoSum(1,2))
    print(twoSum(1))
    print(twoSum('I love ','Arsenal'))
    #print(twoSum('Arsenal'))
{'num1': <class 'int'>, 'num2': <class 'int'>, 'return': <class 'int'>}
3
101
I love Arsenal

几点解释:

  • 第一行输出中的__annotations__是函数的保留属性,保存的是函数声明中的注释内容,比如我们使用的对参数"num1","num2"和返回值的建议类型。
  • 第二行输出是正常用法。
  • 第三行输出验证了:注释内容后可以跟等号"=",意思为未传入实参时,该参数获得的默认值
  • 第四行输出则验证了该解释说明符并非强制检查,我们传入了两个str实参,并不会报错,而是继续进行函数中的加法运算。如果传入的两个实参无法进行函数中规定的运算,则会正常报错。

参考链接:

1python函数注释,参数后面加冒号:,函数后面的箭头→是什么?

2 type hints - PEP Doc

免责声明:文章转载自《Python函数参数中的冒号与箭头》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇nginx+lua 设置跨域使用d3.v5实现饼状图下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

如何使用python移除/删除非空文件夹?

移除/删除非空文件夹/目录的最有效方法是什么? 1.标准库参考:shutil.rmtree。 根据设计,rmtree在包含只读文件的文件夹树上失败。如果要删除文件夹,不管它是否包含只读文件,请使用 import shutil shutil.rmtree('/folder_name', ignore_errors=True) 2.从os.walk()上的p...

python飞机大战源码和素材

python飞机大战素材及代码已上传百度云,链接: https://pan.baidu.com/s/1ptZzCC5Z0tqySrw6p7gHsw 提取码: pqxn plane_main 1 importpygame 2 from plane_sprites import * 3 4 5 classPlaneGame(object): 6 "...

python连接真机或模拟器

前言: 最近写自动化代码的时候,使用模拟器运行 python + appium代码时,APP闪退了,只能使用真机运行代码了。真机要怎么配置设备的信息呢? 怎么配置设备的信息? 配置是使用真机还是模拟器的参数【deviceName】,如果使用模拟器运行的,填【Android Emulator】,真机运行的直接填写真机的手机型号,其他信息根据需要配置。...

Eric6安装问题解决

按照http://eric-ide.python-projects.org/eric-download.html中的说明,执行命令:python install.py 却遇到下面的问题: Compiling source files ...   File "C:Users中文名AppDataLocalProgramsPythonPython36Libsit...

python(八):python使用lmdb数据库

一、入门代码 LMDB的全称是Lightning Memory-Mapped Database(快如闪电的内存映射数据库),它的文件结构简单,包含一个数据文件和一个锁文件: LMDB文件可以同时由多个进程打开,具有极高的数据存取速度,访问简单,不需要运行单独的数据库管理进程,只要在访问数据的代码里引用LMDB库,访问时给文件路径即可。 让系统访问大量小文...

ubuntu 18.04安装PIL(Python Imaging Library )

本人也是个小萌新 安装过程也是曲折 现附上我的安装过程 1.百度教的 sudo apt-get install python-imaging sudo apt-get install libjpeg8 libjpeg62-dev libfreetype6 libfreetype6-dev 2.发现报错,其实是我自己机器的原因 然后又去配置源 我是ubun...