Python小技巧之感受类型的魅力.md
# 失踪人口
Python系列已经很久不更新啦,其实主要是不知道写些什么。今天就简单讲下Python3的类型相关的知识吧。
# 类型
我们都知道,在Python中有很多数据类型,耳熟能详的有:
| 整形 | 浮点型 | 集合 | 字典 | 列表 | 字符串 |
|---|---|---|---|---|---|
| int | float | set | dict | list | str |
但其实我们写Python代码,一般不太去定义参数的类型。
举个例子:
def hello(name):
print(name)
2
这个代码很简单,大家都知道hello方法是要打印name,也都默许了name是一个字符串(str)类型。
# ⚠危险⚠
我们可以想想一下不指定类型的缺点:
假设我们有个新的需求: 要把name变为小写后打印
那代码改动如下:
def hello(name):
print(name.lower())
2
此时如果我的name传入一个int类型的数字,那程序就会抛异常了。
# 指定变量类型
那么如何指定变量类型呢?我们在变量名name后面加:类型即可:

# 变量类型声明的好处
我知道大家可能都不是太习惯去声明一个变量的类型,但是这确实是有好处的。
- 就好比上面的例子,如果我们定义了str类型的参数而传入int,那Pycharm会提示我们,不能这样做。

Pycharm会给我们更多提示
我们知道,str类型的数据会有许多方法,比如上面提到的lower(),我们先看看不指定类型时的情况:

再来看看指定了变量类型的时候,会出现什么情况:

不仅仅是str,其他类型也能给出更智能的提示,容错率大大提高。
阅读代码方便
可以很快就知道方法需要什么参数,返回什么类型。
# 变量声明的坏处
坏处也有,就是比较麻烦,代码看起来没有以前那么流畅。而且没有规定死变量的类型,就好像我刚才的例子,虽然我指定了str类型,但是传入int,依然可以运行代码,没有在运行层面做这样的检查。
# 返回值的类型
我们知道,方法是有返回值的,我们也可以定义方法的返回值,在方法末尾(冒号前面)加一个->类型即可。
def get_name() -> str:
return "胡汉三"
2
好处和上面一样,你可以更智能编写代码,防止出错。

# 常见类型
| 类型 | 名称 |
|---|---|
| int | int |
| str | str |
| List | 列表,也可以用list |
| List[类型] | 可以指定列表中存放的类型 |
| Any | 任意类型 |
| Dict | 字典 同dict |
| Dict[类型A, 类型B] | key为类型A,value为类型B的字典 |
| Set | 同set |
| Union[类型A, 类型B] | 联合类型 接受A或者B类型 |
常用的差不多就这些,但List,Set,Dict这样的变量需要import:
# 从typing中获取Dict,List等数据类型
from typing import Dict
2
指定类型并不会影响编译结果,但可以帮助我们提高开发效率,降低出错率,阅读代码更友好。但随之而来开发写的代码也变多了~

v1.5.1