Python小技巧之感受类型的魅力.md

2022/6/13 Python小技巧

# 失踪人口

Python系列已经很久不更新啦,其实主要是不知道写些什么。今天就简单讲下Python3的类型相关的知识吧。

# 类型

我们都知道,在Python中有很多数据类型,耳熟能详的有:

整形 浮点型 集合 字典 列表 字符串
int float set dict list str

但其实我们写Python代码,一般不太去定义参数的类型。

举个例子:

def hello(name):
    print(name)
1
2

这个代码很简单,大家都知道hello方法是要打印name,也都默许了name是一个字符串(str)类型。

# ⚠危险⚠

我们可以想想一下不指定类型的缺点:

假设我们有个新的需求: 要把name变为小写后打印

那代码改动如下:

def hello(name):
    print(name.lower())
1
2

此时如果我的name传入一个int类型的数字,那程序就会抛异常了。

# 指定变量类型

那么如何指定变量类型呢?我们在变量名name后面加:类型即可:

# 变量类型声明的好处

我知道大家可能都不是太习惯去声明一个变量的类型,但是这确实是有好处的。

  • 就好比上面的例子,如果我们定义了str类型的参数而传入int,那Pycharm会提示我们,不能这样做。

提示我们,期待str类型,你给了int类型

  • Pycharm会给我们更多提示

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

可以看到,啥提示也没有(这样就导致我们很容易写错方法名)

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

因为知道是什么类型的变量,所以他能拉出所有str有的方法

不仅仅是str,其他类型也能给出更智能的提示,容错率大大提高。

  • 阅读代码方便

    可以很快就知道方法需要什么参数,返回什么类型。

# 变量声明的坏处

坏处也有,就是比较麻烦,代码看起来没有以前那么流畅。而且没有规定死变量的类型,就好像我刚才的例子,虽然我指定了str类型,但是传入int,依然可以运行代码,没有在运行层面做这样的检查。

# 返回值的类型

我们知道,方法是有返回值的,我们也可以定义方法的返回值,在方法末尾(冒号前面)加一个->类型即可。

def get_name() -> str:
    return "胡汉三"
1
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
1
2

指定类型并不会影响编译结果,但可以帮助我们提高开发效率降低出错率阅读代码更友好。但随之而来开发写的代码也变多了~