python 函数参数注解_Python中给函数添加注解

这几天在看别人的算法源码时,发现有这样的代码

1

2

3

4

5

6

7

8

if sys.version_info >= (3, 6):

def (self, days: float = ..., seconds: float = ..., microseconds: float = ...,

milliseconds: float = ..., minutes: float = ..., hours: float = ...,

weeks: float = ..., *, fold: int = ...) -> None: ...

else:

def __init__(self, days: float = ..., seconds: float = ..., microseconds: float = ...,

milliseconds: float = ..., minutes: float = ..., hours: float = ...,

weeks: float = ...) -> None: ...

一开始不知道参数后面的float=…是什么意思,后来查找资料才知道这是函数注解

我们都知道Python是一种动态语言,变量以及函数的参数是不区分类型的,这样的好处是有极大的灵活性,但坏处就是对于别人的代码,无法一眼判断出参数的类型,IDE也无法给出正确的提示

于是Python3中引入了新的特性:函数注解

就是类似这样的代码

1

2

def add(x: int, y: int) -> int:

return x + y

用 : 指定参数类型,用 -> 指定函数返回值的类型

不过特别要强调的是,Python 解释器并不会因为这些注解而提供额外的校验,没有任何的类型检查工作,也就是说,这些类型注解加不加,对你的代码来说没有任何影响

1

2

3

4

5

6

def add(x: int, y: int) -> int:

return x + y

print(add(2, 3))

print(add(3.5, 4.3))

print(add("py", "thon"))

输出是

1

2

3

5

7.8

python

但这么做的好处是:

让别的进程员看得更明白

让 IDE 了解类型,从而提供更准确的代码提示、补全和语法检查(包括类型检查,可以看到 str 和 float 类型的参数被高亮提示)

在函数的 __annotations__ 会有自己设定的注解

1

2

3

4

def add(x: int, y: int) -> int:

return x + y

print(add.__annotations__)

输出为

1

{'x': , 'y': , 'return': }

在Python 3.6中,又引入了对变量类型进行注解的方法:

1

2

a: int = 123

b: str = "python"

更进一步,如果你需要指明一个全部由整数组成的列表:

1

2

from typing import List

l: List[int] = [1, 2, 3]

但同样,这些仅仅是注解,不会对代码产生任何影响

不过,你可以通过 mypy 库来检验最终代码是否符合注解

安装mypy

1

pip install mypy

执行代码:

1

mypy test.py

如果类型都符合,则不会有任何输出,否则就会给出类似输出:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值