Python类型提示

摘自:Python 类型提示简介 - FastAPI (tiangolo.com)

快速入门

类型提示用于声明一个变量的类型,在Python 3.6+版本的时候引入。

示例:

def get_full_name(first_name: str, last_name: str):
    full_name = first_name.title() + " " + last_name.title()
    return full_name

print(get_full_name("peter","park"))

注意,类型提示用的是冒号,不是设置默认参数的等号。

这样编写的好处在于,编辑器知道参数类型后,比如vs code,输完 first_name. 后按一下 Ctrl + Space,会自动显示字符串支持的方法。

嵌套类型

有些容器数据结构可以包含其他的值,比如 dictlistsettuple。它们内部的值也会拥有自己的类型。

你可以使用 Python 的 typing 标准库来声明这些类型以及子类型。

它专门用来支持这些类型提示。

列表

例如,让我们来定义一个由 str 组成的 list 变量。

typing 模块导入 List(注意是大写的 L):

from typing import List

def process_items(items: List[str]):
    for item in items:
        print(item)

这表示:"变量 items 是一个 list,并且这个列表里的每一个元素都是 str"。

这样,即使在处理列表中的元素时,编辑器也可以提供支持。

元组和集合

声明 tupleset 的方法也是一样的:

from typing import Set, Tuple

def process_items(items_t: Tuple[int, int, str], items_s: Set[bytes]):
    return items_t, items_s

这表示:

  • 变量 items_t 是一个 tuple,其中的每个元素都是 int 类型。
  • 变量 items_s 是一个 set,其中的每个元素都是 bytes 类型。

字典

定义 dict 时,需要传入两个子类型,用逗号进行分隔。

第一个子类型声明 dict 的所有键。

第二个子类型声明 dict 的所有值:

from typing import Dict

def process_items(prices: Dict[str, float]):
    for item_name, item_price in prices.items():
        print(item_name)
        print(item_price)

这表示:

  • 变量prices是一个dict:
    • 键都是str类型
    • 值都是float类型

类作为类型

你也可以将类声明为变量的类型。

假设你有一个名为 Person 的类,拥有 name 属性:

class Person:
    def __init__(self, name: str):
        self.name = name

def get_person_name(one_person: Person):
    return one_person.name

接下来,你可以将一个变量声明为 Person 类型:

class Person:
    def __init__(self, name: str):
        self.name = name

def get_person_name(one_person: Person):
    return one_person.name

然后,你将再次获得所有的编辑器支持。

posted @ 2021-07-14 19:16  花酒锄作田  阅读(165)  评论(0编辑  收藏  举报