程序代码篇---Python指明函数参数类型

news2025/2/22 11:29:02

文章目录

  • 前言
  • 简介
  • 一、函数参数的类型指定
    • 1. 基本类型提示
    • 2. 默认参数
    • 3. 可变参数
    • 4. 联合类型(Union)
    • 5. 可选类型(Optional)
    • 6. 复杂类型
  • 二、返回值的类型指定
    • 1. 基本返回类型
    • 2. 无返回值(None)
    • 3. 返回多个值(Tuple)
    • 4. 生成器(Generator)
  • 三、高级类型提示用法
    • 1. 类型别名(Type Aliases)
    • 2. 泛型(Generics)
    • 3. 可调用对象(Callable)
    • 4. NewType
  • 四、工具支持与检查
    • 1. 静态类型检查(mypy)
    • 2. IDE支持
  • 五、综合示例
  • 六、注意事项
    • 运行时无强制检测
    • 兼容性
    • 动态类型优势
    • 通过合理使用类型提示
  • 七、总结


前言

本文仅仅简单介绍了Python中函数参数的提前指明的使用。


简介

在Python中,类型提示(Type Hints)用于明确函数参数和返回值的预期类型,提升代码可读性和维护性,并支持静态类型检查工具(如mypy)。以下是详细说明及示例代码:

一、函数参数的类型指定

1. 基本类型提示

直接在参数后添加类型注解:

def greet(name: str, age: int) -> None:
    print(f"Hello, {name}. You are {age} years old.")

2. 默认参数

在默认值前添加类型注解:

def add(a: int, b: int = 0) -> int:
    return a + b

3. 可变参数

*args:使用Tuple或Iterable:

def sum_numbers(*args: float) -> float:
    return sum(args)

**kwargs:使用Dict指定键值类型:

def print_kwargs(**kwargs: str) -> None:
    for key, value in kwargs.items():
        print(f"{key}: {value}")

4. 联合类型(Union)

允许多种可能的类型(Python 3.10+ 可使用 | 语法):

from typing import Union

def parse_input(value: Union[int, str]) -> int:
    return int(value)
#Python 3.10+ 简化写法
def parse_input(value: int | str) -> int:
    return int(value)

5. 可选类型(Optional)

表示参数可以是某类型或None:

from typing import Optional

def find_user(name: str) -> Optional[str]:
    if name == "admin":
        return "Admin User"
    return None

6. 复杂类型

列表、字典:

from typing import List, Dict

def process_items(items: List[str], prices: Dict[str, float]) -> None:
    for item in items:
        print(f"Item: {item}, Price: {prices.get(item, 0.0)}")

自定义类:

class User:
    def __init__(self, name: str):
        self.name = name

def create_user(name: str) -> User:
    return User(name)

二、返回值的类型指定

1. 基本返回类型

直接指定返回值类型:

def add(a: int, b: int) -> int:
    return a + b

2. 无返回值(None)

明确函数没有返回值:

def log_message(message: str) -> None:
    print(f"[LOG] {message}")

3. 返回多个值(Tuple)

使用Tuple指定多个返回值的类型:

from typing import Tuple

def split_name(full_name: str) -> Tuple[str, str]:
    first, last = full_name.split()
    return first, last

4. 生成器(Generator)

指定生成器的产出值、发送值和返回值类型:

from typing import Generator

def count_up_to(n: int) -> Generator[int, None, None]:
    count = 1
    while count <= n:
        yield count
        count += 1

三、高级类型提示用法

1. 类型别名(Type Aliases)

简化复杂类型声明:

from typing import List, Tuple

Coordinates = List[Tuple[float, float]]

def plot_points(points: Coordinates) -> None:
    for x, y in points:
        print(f"Plotting at ({x}, {y})")

2. 泛型(Generics)

使用TypeVar定义泛型类型:

from typing import TypeVar, List

T = TypeVar('T')

def first_element(items: List[T]) -> T:
    return items[0]

3. 可调用对象(Callable)

标注回调函数的类型:

from typing import Callable

def on_event(callback: Callable[[str, int], None]) -> None:
    callback("click", 100)

4. NewType

创建更明确的类型:

from typing import NewType

UserId = NewType("UserId", int)

def get_user(user_id: UserId) -> str:
    return f"User {user_id}"

四、工具支持与检查

1. 静态类型检查(mypy)

安装与使用:

pip install mypy
mypy your_script.py

2. IDE支持

PyCharm/VSCode:自动补全和类型错误提示。
Jupyter Notebook:部分支持类型提示。

五、综合示例

from typing import Union, List, Optional, Tuple

#参数类型:联合类型 + 默认参数
def format_data(
    data: Union[List[int], str],
    prefix: str = "Data: "
) -> Optional[str]:
    if isinstance(data, list):
        return prefix + ", ".join(map(str, data))
    elif isinstance(data, str):
        return prefix + data
    return None

#返回值类型:Tuple
def analyze_numbers(numbers: List[float]) -> Tuple[float, float]:
    avg = sum(numbers) / len(numbers)
    max_val = max(numbers)
    return avg, max_val

#泛型函数
from typing import TypeVar

T = TypeVar("T")

def filter_list(items: List[T], condition: Callable[[T], bool]) -> List[T]:
    return [item for item in items if condition(item)]

#使用示例
if __name__ == "__main__":
    print(format_data([1, 2, 3]))  # 输出: Data: 1, 2, 3
    avg, max_val = analyze_numbers([10.5, 20.3, 15.2])
    print(f"Average: {avg}, Max: {max_val}")  # 输出: Average: 15.333..., Max: 20.3

六、注意事项

运行时无强制检测

运行时无强制检查:类型提示不会影响代码执行,需依赖工具(如mypy)检查。

兼容性

兼容性:Python 3.5+ 支持基础类型提示,部分高级特性需更高版本。

动态类型优势

动态类型优势:类型提示不破坏Python的灵活性,可选择性使用。

通过合理使用类型提示

通过合理使用类型提示,可以显著提升代码的可维护性和团队协作效率。


七、总结

以上就是今天要讲的内容,本文仅仅简单介绍了Python中函数参数的提前指明的使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2303385.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【论文阅读】SAM-CP:将SAM与组合提示结合起来的多功能分割

导言 近年来&#xff0c;视觉基础模型的快速发展推动了多模态理解的进步&#xff0c;尤其是在图像分割任务中。例如&#xff0c;Segment Anything模型&#xff08;SAM&#xff09;在图像Mask分割上表现出色&#xff0c;但在语义及实例分割方面仍存在局限。本文提出的SAM-CP&am…

逻辑架构与软件架构在PREEvision中的设计关系

1 Introduction 在如今汽车电子系统的开发过程中&#xff0c;系统架构设计是至关重要的环节。无论是汽车控制系统、信息娱乐系统&#xff0c;还是电动驱动系统&#xff0c;架构设计都决定了整个系统的功能、性能以及后期的可维护性和可扩展性。 在往期文章中&#xff0c;我们…

武汉火影数字|VR沉浸式空间制作 VR大空间打造

VR沉浸式空间制作是指通过虚拟现实技术创建一个逼真的三维环境&#xff0c;让用户能够沉浸在这个环境中&#xff0c;彷佛置身于一个全新的世界。 也许你会好奇&#xff0c;VR 沉浸式空间究竟是如何将我们带入那奇妙的虚拟世界的呢&#xff1f;这背后&#xff0c;离不开一系列关…

大数据学习之任务流调度系统Azkaban、Superset可视化系统

一.任务流调度系统Azkaban 1.课程介绍 2.为什么需要工作流调度系统 3.AZKABAN是什么 4.AZKABAN下载 5.制作安装包 6.tar包准备 7.MYSQL配置AZKABAN 8.配置EXECUTOR SERVER 9.配置WEBSERVER 10.单作业实战_yaml语言(今天稍晚更新) 11.单作业实战 12.多作业依赖实战 13.失败自动重…

在VS-qt的程序中,后期增加PCH预编译功能,提高编译速度

由于前期创建qt程序的时候未勾选pch功能,导致没有启动预编译的功能. 这种情况下需要增加pch功能应该怎么做? 在项目中增加2个文件 stdafx.h和stdafx.cpp文件 stdafx.h增加qt常用头文件 #pragma once //windows #include <windows.h>//qt常用 #include <QObject&g…

蓝桥云客 路径之谜

11.路径之谜 - 蓝桥云课 路径之谜 题目描述 小明冒充X星球的骑士&#xff0c;进入了一个奇怪的城堡。 城堡里边什么都没有&#xff0c;只有方形石头铺成的地面。 假设城堡地面是nn个方格。如下图所示。 按习俗&#xff0c;骑士要从西北角走到东南角。可以横向或纵向移动&…

【Python项目】基于Python的语音数据及标注核对审核系统

【Python项目】基于Python的语音数据及标注核对审核系统 技术简介&#xff1a; 采用Python技术、MySQL数据库、Django框架等实现。 系统简介&#xff1a; 语音数据及标注核对审核系统是一个基于B/S架构的语音数据处理平台&#xff0c;旨在通过自动化的方式对语音数据进行标…

深入解析BFS算法:C++实现无权图最短路径的高效解决方案

在无权图中&#xff0c;广度优先搜索&#xff08;BFS&#xff09;是解决最短路径问题的高效算法。接下来博主从专业角度深入探讨其实现细节&#xff0c;并给出C代码示例&#xff1a; 目录 一、核心原理 二、算法步骤 三、C实现关键点 1. 数据结构 2. 边界检查 3. 路径回溯…

LeetCode刷题---二分查找---441

排列硬币 441. 排列硬币 - 力扣&#xff08;LeetCode&#xff09; 题目 你总共有 n 枚硬币&#xff0c;并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯&#xff0c;其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。 给你一个数字 n &#xff0c;计算…

Unity结合Vuforia虚拟按键实现AR机械仿真动画效果

零、最终效果 待上传 一、资源准备 1、Vuforia Vuforia版本不能高于10.17.4&#xff08;往上的版本虚拟按键功能被删除&#xff09; 2、Unity Unity版本必须要高于2022.3.x&#xff0c;不然使用Vuforia插件时会出现bug 二、主要内容 1、添加虚拟按钮 2、为虚拟按钮设置…

网络安全 linux学习计划 linux网络安全精要

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 2.使用命令行 文件系统层次标准&#xff08;FHS&#xff09;是一个文件和目录在Unix和Linux操作系统上面应该如何存储的定义。 /bin 重要的二进制可执行程序/bo…

为AI聊天工具添加一个知识系统 之115 详细设计之56 知识表征 之2

本文要点 要点 知识表征的顶级范畴中最好是先将九个原语primitive T, ⊥, Independent, Relative, Mediating, Physical, Abstract, Continuant,和 Occurrent 进行分组&#xff08;分成2大组 和 4个小组&#xff09;并写出它们的满足公司&#xff0c;然后将它们和三种设计&am…

C#初级教程(1)——C# 与.NET 框架:探索微软平台编程的强大组合

图片来源&#xff1a; https://www.lvhang.site/docs/dotnettimeline 即梦AI - 一站式AI创作平台 一、历史发展脉络 在早期的微软平台编程中&#xff0c;常用的编程语言有 Visual Basic、C、C。到了 20 世纪 90 年代末&#xff0c;Win32 API、MFC&#xff08;Microsoft Found…

Mac m1 连接公司内网

1、创建VPN 1、在系统偏好设置 2、选择网络 3、进行添加 2、添加设置 1、选择VPN 2、类型选择L2TP/IPSec 3、填写服务器IP和账号 4、点击认证设置-填写密码 。然后应用 3、进行特殊配置 网上说苹果系统的问题。 1、创建命令 sudo vim /etc/ppp/options 2、添加内容-主要别…

C++:类与对象,定义类和构造函数

#define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> using namespace std; //如何让定义一个类 // 封装 // 1、将数据和方法定义到一起。 // 2、把想给你看的数据给你看&#xff0c;不想给你看的封装起来。 通过访问限定符来实现 class Stack { public: //1.成…

Nginx环境安装

一、官网地址 Nginx官网&#xff1a;http://nginx.org/ Nginx中文网&#xff1a;https://nginx.p2hp.com/ 二、Nginx版本 mainline version 开发版本stableversion 稳定版本legacy version 历史版本 三、Windows系统安装Nginx 第一步&#xff1a;选择Windows版本&#xff0c;…

Spring AI + Ollama 实现调用DeepSeek-R1模型API

一、前言 随着人工智能技术的飞速发展&#xff0c;大语言模型&#xff08;LLM&#xff09;在各个领域的应用越来越广泛。DeepSeek 作为一款备受瞩目的国产大语言模型&#xff0c;凭借其强大的自然语言处理能力和丰富的知识储备&#xff0c;迅速成为业界关注的焦点。无论是文本生…

android系统SystemServer进程启动流程分析

目录 一,SystemServer整体框架 二,SystemServer启动源码分析 2.1,重要的概念 2.2,启动入口 2.3,创建对应进程的binder 三,binder驱动和binder线程池 四,SystemServer真正启动方法 4.1 SystemServer main方法里面主要做了几件事情 1)创建SystemServiceManager管理所有的…

Oracle 深入理解Lock和Latch ,解析访问数据块全流程

Oracle 锁机制介绍 根据保护对象的不同&#xff0c;单实例Oracle数据库锁可以分为以下几大类&#xff1a; DML lock&#xff08;data locks&#xff0c;数据锁&#xff09;&#xff1a;用于保护数据的完整性&#xff1b; DDL lock&#xff08;dictionary locks&#xff0c;字典…

如何基于transformers库通过训练Qwen/DeepSeek模型的传统分类能力实现文本分类任务

文章目录 模型与环境准备文档分析源码解读模型训练及推理方式进阶:CPU与显存的切换进阶:多卡数据并行训练🔑 DDP 训练过程核心步骤🚫 DDP 不适用于模型并行⚖️ DDP vs. Model Parallelism⚙️ 解决大模型训练的推荐方法🎉进入大模型应用与实战专栏 | 🚀查看更多专栏…