类型提示和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
嵌套类型
有些容器数据结构可以包含其他的值,比如 dict
、list
、set
和 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 类型的数据。
最新文章
- flex 正则 验证
- 与Perl兼容的正则表达式函数
- 20145218 《Java程序设计》第六周学习总结
- android浮动搜索框
- 常用邮件 smtp pop
- 快速入门:触摸输入(使用 C#/VB/C++ 和 XAML 的 Windows 应用商店应用)
- linux查看系统的日志的一些实用操作
- A - Number Sequence(矩阵快速幂或者找周期)
- Cocos2d-x 的“HelloWorld” 深入分析
- Jenkins远程部署SpringBoot应用
- linux服务器间文件夹拷贝
- IOZONE测试工具使用方法
- Swift开发iOS项目实战视频教程(二)---图片与动画
- hibernate 多对一(级联)操作
- 公司Docker环境配置
- 删除(unfork)github中某个库(repository)
- Codeforces 1053 C - Putting Boxes Together
- mac下hbase安装
- table边框
- vue 递归组件
热门文章
- Shell 基本常识
- [WPF]auto和*总结
- 对线面试官:浅聊一下 Java 虚拟机栈?
- TCP与UDP、socket模块
- 【已解决】rust 报错 no_std can't find crate for `test` || vscode 工作区多文件夹
- Emacs Client启动方式,在WSL像VIM一样操作
- P13_协同工作_小程序权限管理的概念以及成员管理的两个方面
- .NET 中的并发编程
- SpringCloud GateWay网关(入门)
- 【TS】函数重载--可选参数--默认参数