类型提示和python函数中'->'的用法

一、类型提示

在python中,我们定义一个有参函数,调用该函数时需要传入参数,如下所示:

# 定义一个简单的函数
def get_full_name(first_name, last_name):
    full_name = first_name.title() + " " + last_name.title()
    return full_name


print(get_full_name("john", "doe"))  # 正常运行,结果:John Doe
print(get_full_name(1,2))  # 报错

"""
上面的函数中有两个参数,但是没有说明参数的数据类型,
所以如果我们传入的类型不是str类型就会报错
"""

如上所示,如果没有去看函数的内部代码,函数的调用者并不知道需要传什么数据类型的参数给函数,所以我们就需要给调用者一些提示,告诉调用者该函数的参数应该使用什么数据类型的参数,这就是类型提示,如下:

# 注意函数参数后面的 ':str', 就表示该参数需要的是str类型的数据
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("john", "doe"))

如上面的代码所示,我们将把下面这段代码中的函数参数从:

first_name, last_name

改成:

first_name: str, last_name: str

这样调用者就知道该传什么数据类型的参数。这和声明默认值是不同的,例如:

# 给函数参数添加默认值
first_name="john", last_name="doe"

这两者不一样。

我们用的是冒号(:),不是等号(=)。

而且添加类型提示一般不会改变原来的运行结果。

不只是 str,你能够声明所有的标准 Python 类型。

比如以下类型:

  • int
  • float
  • bool
  • bytes
def get_items(item_a: str, item_b: int, item_c: float, item_d: bool, item_e: bytes):
    return item_a, item_b, item_c, item_d, item_d, item_e

嵌套类型

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

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

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

列表类型

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

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

from typing import List


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

同样以冒号(:)来声明这个变量。输入 List 作为类型。由于列表是带有"子类型"的类型,所以我们把子类型放在方括号中。

元组和集合类型

声明 tuple 和 set 的方法也是一样的:

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 类型, 最后一个元素是 str 类型。
  • 变量 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
    • 这个 dict 的所有键为 str 类型(可以看作是字典内每个元素的名称)。
    • 这个 dict 的所有值为 float 类型(可以看作是字典内每个元素的价格)。

二、'->'的用法

使用上面的例子,如下:

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

可以看到,如果不看内部代码,我们并不知道这个函数返回值的数据类型,所以我们做如下改动:

# 注意函数形参后面有个: -> str
def get_full_name(first_name, last_name) -> str:
    full_name = first_name.title() + " " + last_name.title()
    return full_name

我们可以看到,在上面的函数中,我们在形参后面添加了 '-> str' ,这个指的是函数的返回值为数据类型,告诉函数调用者这个函数的返回值为 str 类型的数据

posted @ 2023-01-18 14:13  _yessir  阅读(1482)  评论(0编辑  收藏  举报