类型提示和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 类型的数据。
类型提示和python函数中'->'的用法的更多相关文章
- Python函数中参数类型
在学习Python函数的时候,函数本身的定义和调用并不是很复杂,但是函数的参数类型和用法的确有些复杂.在此做一个小结,加深理解. Python参数的定义 负责给函数提供一些必要的数据或信息,以保证函数 ...
- python函数中的参数类型
python函数中的参数 动态获取函数的参数 python的函数类型详解
- 一道题带你搞定Python函数中形参和实参问题
昨天在Python学习群里有位路人甲问了个Python函数中关于形参和实参一个很基础的问题,虽然很基础,但是对于很多小白来说不一定简单,反而会被搞得稀里糊涂.人生苦短,我用Python. 为了解答大家 ...
- Python 函数中,参数是传值,还是传引用?
在 C/C++ 中,传值和传引用是函数参数传递的两种方式,在Python中参数是如何传递的?回答这个问题前,不如先来看两段代码. 代码段1: def foo(arg): arg = 2 print(a ...
- python 函数中使用全局变量
python 函数中如果需要使用全局变量,需要使用 global + 变量名 进行声明, 如果不声明,那么就是重新定义一个局部变量,并不会改变全局变量的值 n [1]: a = 3 In [2]: d ...
- Python函数中的可变参数
在Python函数中,还可以定义可变参数. 如:给定一组数字a,b,c……,请计算a2 + b2 + c2 + ……. 要定义出这个函数,我们必须确定输入的参数.由于参数个数不确定,我们首先想到可以把 ...
- python函数中把列表(list)当参数时的"入坑"与"出坑"
在Python函数中,传递的参数如果默认有一个为 列表(list),那么就要注意了,此处有坑!! 入坑 def f(x,li=[]): for i in range(x): li.append(i*i ...
- python函数中参数是如何传递的?
python中一切皆对象,函数中参数传递的是对象的引用. 1在函数中改变变量指向的对象,即指向不同对象. 当在函数中修改传递进来的变量指向另一个对象时,实参的对象不会改变. >>> ...
- python 函数中的递归、lambda 、map reduce 等详解
举例说明 #例1: ###递归函数求和 from traitlets.traitlets import Instance def mysum(L): print(L) if not L: return ...
- python函数中参数的传递
Python唯一支持的参数传递方式是『共享传参』(call by sharing)多数面向对象语言都采用这一模式,包括Ruby.Smalltalk和Java(Java的引用类型是这样,基本类型按值传递 ...
随机推荐
- 聊一聊 SQLSERVER 的行不能跨页
一:背景 1. 讲故事 相信有很多朋友在学习 SQLSERVER 的时候都听说过这句话,但大多都是记忆为主,最近在研究 SQLSERVER,所以我们从 底层存储 的角度来深入理解下. 二:理解数据页 ...
- [OpenCV实战]8 深度学习目标检测网络YOLOv3的训练
目录 1 数据集 1.1 下载openImages雪人数据[约1.5小时] 1.2 训练集测试集拆分 2 Darknet 2.1 下载并构建Darknet 2.2 修改代码以定期保存模型文件 2.3 ...
- [WPF]ICommand最佳使用方法
public class RelayCommand:ICommand { private Predicate<object> _canExecute; private Action< ...
- 使用vue创建一个吸顶的菜单项--简单版
1.hover时候出现,总体来说只改了一下两个index.vue,还有route文件 src\layoutTwo\index.vue <template> <div class=&q ...
- KingbaseES函数三态
理解函数的三态1 VOLATILE: volatile函数没有限制,可以修改数据(如执行delete,insert,update), 使用同样的参数调用可能返回不同的值. STABLE: 不允许修改数 ...
- ChatGpt国内教程
近ChatGPT大火呀,小伙伴们是不是在网上看到各种和ChatGPT有趣聊天的截图,比如翻译代码.编写代码,奈何自己实力不够,被网络拒之门外,只能眼馋别人的东西.看别人玩,肯定不如自己玩一把舒服的啊. ...
- drf-drf请求、响应、基于GenericAPIView+5个视图扩展类
1.反序列化类校验部分源码分析(了解) 1.当我们在视图类中生成一个序列化类对象ser,并且用ser.is_valid()是就会执行校验,校验通过返回True,不通过返回False.首先对象ser和序 ...
- JMH测试工具
参考:https://blog.csdn.net/agonie201218/article/details/122333354 1 简介 JMH即Java Microbenchmark Harness ...
- zookeeper04---ZAB协议
转https://www.jianshu.com/p/2bceacd60b8a 1.什么是Zab协议 1.1Zab协议简介 1.2 Zab 协议的特性(怎么保持数据一致性) 2.Zab 协议实现的作用 ...
- JSON Crack 数据可视化工具
JSON Crack简介 JSON Crack 是一个很方便的 JSON 数据可视化工具. 该项目不是简单的展示 JSON 数据,而是将其转化为类似思维导图的形式,支持放大/缩小.展开/收缩.搜索节点 ...