Python高级之函数参数进阶Optional

【一】引言

  • 在Python 3.5版本后引入的typing模块为Python的静态类型注解提供了支持。
  • 这个模块在增强代码可读性和维护性方面提供了帮助。
  • 本文将深入探讨typing模块,介绍其基本概念、常用类型注解以及使用示例,以帮助读者更全面地了解和应用静态类型注解。

【二】基本类型注解

【1】基础语法

def example(参数名: 参数类型) -> 返回值类型:
    代码块
    return  返回值

【2】内置类型

  • typing模块中提供了与Python内置类型相对应的类型提示,比如int、float、str、bool等
def user(name: str, password: int, salary: float, tag: bool):
    print(name, type(name))  # 字符串类型
    print(password, type(password))  # 整数类型
    print(salary, type(salary))  # 浮点数类型
    print(tag, type(tag))  # 布尔类型


user('ligo', 123, 3000.5, True)
# ligo <class 'str'>
# 123 <class 'int'>
# 3000.5 <class 'float'>
# True <class 'bool'>

【3】类型别名

  • typing模块中有多种内置的类型别名,比如List、Dict、Tuple、Set等,用于注解变量和函数的预期类型

(1)列表类型

from typing import List

# 定义一个名为user的函数,接收一个整数列表(List[int])类型的参数user_data,并无返回值(None)
# 函数作用:打印传入数据user_data是一个整数列表,以及列表中的每个元素都是整数类型,同时输出数据本身
def user(user_data: List[int]) -> None:
    print(user_data, type(user_data))


user(['ligo', 123]) #['ligo', 123] <class 'list'>

(2)字典类型

from typing import Dict

# 定义一个名为user的函数,接收一个字典(Dict[str, int])类型的参数user_data,其中键为字符串(str),值为整数(int),并无返回值(None)
# 函数作用:打印传入数据user_data是一个字典,键为字符串类型,值为整数类型,同时输出数据本身
def user(user_data: Dict[str, int]) -> None:
    print(user_data, type(user_data))


user({'password': 123}) #{'password': 123} <class 'dict'>

(3)元祖类型

from typing import Tuple

# 定义一个名为user的函数,接收一个元组(Tuple[str])类型的参数user_data,其中元素为字符串(str),并无返回值(None)
# 函数作用:打印传入数据user_data是一个元组,所有元素均为字符串类型,同时输出数据本身
def user(user_data: Tuple[str]) -> None:
    print(user_data, type(user_data))


user(('1', '2', '3'))  # ('1', '2', '3') <class 'tuple'>

(4)集合类型

from typing import Set

# 定义一个名为user的函数,接收一个集合(Set[int])类型的参数user_data,其中元素为整数(int),并无返回值(None)
# 函数作用:打印传入数据user_data是一个集合,所有元素均为整数类型,同时输出数据本身
def user(user_data: Set[str]) -> None:
    print(user_data, type(user_data))


user({1, 2, 3})  #{1, 2, 3} <class 'set'>

【4】Any

  • Any表示任意类型,用于无法确定具体类型或者希望允许任何类型的情况
#Any表示允许任何类型的数据
from typing import Any

# 定义一个名为user的函数,接收一个Any类型的参数user_data,表示该参数可以是任何类型的数据
# 函数没有返回值,声明为None
def user(user_data: Any) -> None:
    print(user_data,type(user_data))


user('ligo')  
user(123)  
user({1, 2, 3}) 
user(1.23)  
# ligo <class 'str'>
# 123 <class 'int'>
# {1, 2, 3} <class 'set'>
# 1.23 <class 'float'>

【5】Union类型

  • Union允许参数接受多种不同类型的数据
#Union允许函数接收多种类型作为参数或返回值
from typing import Union

# 定义一个名为number的函数,接收一个联合类型(Union[int, float, str])的参数number,可以是整数(int)、浮点数(float)或字符串(str)
# 函数返回值也为联合类型(Union[int, float, str]),即返回结果可能是整数、浮点数或字符串
def number(num: Union[int, float, str]) -> None:
    print(num, type(num))


number('ligo')  # ligo
number(123)  # 123
number(1.23)  # 1.23
# ligo <class 'str'>
# 123 <class 'int'>
# 1.23 <class 'float'>

【6】Optional类型

  • Optional表示参数可以是指定类型或者None
# Optional[str]表示字符串类型或None
from typing import Optional


# 定义一个名为user的函数,接收一个Optional[str]类型的参数name,表示该参数可以是字符串类型或None
# 函数返回一个str类型的结果
def user(userdata: Optional[str]) -> int:
    print(userdata, type(userdata))


user('ligo')  # ligo <class 'str'>


# 定义一个名为user的函数,接收一个Optional[int]类型的参数name,表示该参数可以是字符串类型或None
# 函数返回一个int类型的结果
def user(userdata: Optional[int]) -> int:
    print(userdata, type(userdata))


user(123)  # 123 <class 'int'>
posted @   Ligo6  阅读(2108)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示