Python类型注解

Posted 风流 少年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python类型注解相关的知识,希望对你有一定的参考价值。

一:简介

Python是一种弱类型现代编程语言,所谓弱类型是指变量没有具体的类型,变量没有指定的类型这种设计有好处也有坏处,好处是变量的类型可以随意改变,书写更加简洁,坏处是变量没有指定类型对开发者不友好,当开发者不了解别人的代码时就不知道这个值应该使用具体的什么类型,另一个坏处是变量没有具体的类型,那么开发工具(PyCharm)它怎么提示你该有哪些方法呢?居于这两个非常重要的缺点,Python在3.5版本中引入了类型注解,来标记变量的类型或者函数参数的类型以及方法的返回值类型等。

二:类型推断

2.1 方式一

  • Python类型注解可以在方法名后面使用 : 数据类型 来标注该变量的具体类型,swift语言也是这种语法。
  • 类型注解只是一种注释,而不是一种的强制语法(注释只是为了让程序员明白),标记了类型并不会限制变量的类型,我们可以将一个str类型的变量的值修改为其它类型的值,而语法不会报错。
  • 如果通过变量的值能够推到出来变量的类型,那么此时类型标注不标注都是一样的。
name: str = 'zhangsan'
age: int = 18
amount: float = 6.6
b: bool = True

# 语法不会报错
name = True

2.2 方式二

Python自创了另一套方式来指定变量的类型,就是通过一种特定格式的注释来指定,语法为 # type: 数据类型。同样强调类型注解是一种注释,只是给程序员解释,不影响任何的编译问题,这里name虽然是str,但是通过注释来标记为bool,编译仍然不报错。

name = '错误的类型标注,但是丝毫不影响编译'   # type: bool

三:集合类型注解(不指定元素类型)

类型注解通常用于无法通过遍历的值来推断出变量的类型的时候使用。

l: list = [1, 'foobar', True, 6.6]
t: tuple = ('foobar', 666, True)
s: set = 1, 2, 3
d: dict = 'age': 18

四:集合类型注解(指定元素类型)

4.1 Python 3.8.0 需要引入typing

Union 类型表示某个类型可以是多种类型的任意一种,而且多种类型之间没有顺序要求。

from typing import List, Tuple, Set, Dict, Union
# 集合中的类型都一样
l: List[int] = [1, 2, 3]
# 集合中的类型不一样需要使用Union
l: List[Union[str, int, float, bool]] = ['foobar', 1, 2.0, True]
# 元素可以是int或str,没有顺序要求
l: List[Union[str, int]] = [1, 'hello', 'world', 2, 3]

# 元组必须定义每个元素的类型
t: Tuple[str, int] = ('foobar', 666)
t: Tuple[Union[str, int]] = ('foobar', 666)

s: Set[int] = 1, 2, 3

d: Dict[str, int] = 'age': 10

Python 3.9

Python 3.9 不需要引入typing,可以直接使用list、tuple、set、dict。

l: list[int] = [1, 2, 3]
# 集合中的类型不一样需要使用Union
l: list[str, int, float, bool] = ['foobar', 1, 2.0, True]

# 元组必须定义每个元素的类型
t: tuple[str, int] = ('foobar', 666)

s: set[int] = 1, 2, 3

d: dict[str, int] = 'age': 10

方法类型注解

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

以上是关于Python类型注解的主要内容,如果未能解决你的问题,请参考以下文章

@responsebody一般在啥情况下使用,他的好处与坏处?

Python类型注解

python类型注解

Python3新特性 类型注解 以及 点点点

Python void 返回类型注解

解压 Python 的类型注解