ChatGLM3中的一些语法

news2024/9/23 15:27:22

ChatGLM3中的一些语法

flyfish

一、@functools.cache

@functools.cache 是 Python 3.9 引入的装饰器,用于实现函数的结果缓存。它的全称是 @functools.cache,能够自动缓存函数调用的结果。

import functools

@functools.cache
def expensive_computation(x):
    print(f"Computing {x}...")
    return x * x

# 第一次调用时会执行计算并缓存结果
result1 = expensive_computation(4)  # 输出: Computing 4...
print(result1)  # 输出: 16

# 第二次调用相同输入时直接返回缓存结果
result2 = expensive_computation(4)  # 不再输出 "Computing 4..."
print(result2)  # 输出: 16

输出

Computing 4...
16
16

二、Python 3.10 之后,通常使用 | 来替代 Union

Union 用于声明参数或返回值可以是多种类型,具体用法是在 typing 模块中导入后,通过 Union[类型1, 类型2, …] 的形式进行使用。在 Python 3.10 之后,通常使用 | 来替代 Union 进行类型注解

# Python 3.10 及以上
def process_data(data: int | str) -> int | str:
    if isinstance(data, int):
        return data * 2
    elif isinstance(data, str):
        return data.upper()

result1 = process_data(10)  # 返回 20
result2 = process_data("hello")  # 返回 "HELLO"
print(result1, result2)




# Python 3.9 及之前
from typing import Union

def process_data(data: Union[int, str]) -> Union[int, str]:
    if isinstance(data, int):
        return data * 2
    elif isinstance(data, str):
        return data.upper()

result1 = process_data(10)  # 返回 20
result2 = process_data("hello")  # 返回 "HELLO"
print(result1, result2)

输出

20 HELLO
20 HELLO

三、typer

Typer 的主要作用:
Typer 通过使用 Python 的类型注解,可以自动推断和处理命令行参数,减少手动解析参数的繁琐代码,从而简化命令行工具的开发。
基于类型注解和函数签名,Typer 会自动生成详尽的命令行帮助文档,无需手动编写。
Typer 利用类型注解自动处理参数的类型转换,并提供详细的错误信息,支持参数验证和转换。
Typer 支持命令行的自动补全功能(如 Bash 或 Zsh),让命令行工具更加友好。
Typer 在命令行中显示清晰易读的错误信息,便于调试和用户理解,美化错误信息。

typer.Typer

typer.Typer 是用于创建命令行应用对象的类,它是整个 Typer 应用的基础。你可以将不同的函数注册为命令,并通过它构建完整的命令行应用。

import typer

# 创建 Typer 实例
app = typer.Typer()

@app.command()
def greet(name: str):
    """
    一个简单的问候命令
    """
    print(f"Hello, {name}!")

if __name__ == "__main__":
    app()

typer.Typer():用于创建一个 Typer 应用对象。
@app.command():用来将某个函数注册为命令。

typer.Argument

typer.Argument 用于声明命令行的“位置参数”。位置参数是必须提供的,调用命令时,它们根据顺序传递给函数。typer.Argument 允许设置参数类型、默认值、帮助信息等。
用法

import typer

app = typer.Typer()

@app.command()
def greet(name: str = typer.Argument("World")):
    """
    打招呼,名字为必选的参数
    """
    print(f"Hello, {name}!")

if __name__ == "__main__":
    app()

运行命令

python script.py greet Quijote  # 输出: Hello, Quijote!
python script.py greet        # 输出: Hello, World!

typer.Argument():定义一个位置参数,在调用命令时必须按照顺序传递。
name: str = typer.Argument("World"):为参数设置了默认值,如果不提供参数则会使用 “World”。

typer.Option

typer.Option 用于声明命令行的“选项参数”。选项参数不是必须的,用户可以通过类似 --option 的语法来传递。

import typer

app = typer.Typer()

@app.command()
def greet(name: str, greeting: str = typer.Option("Hello", help="自定义问候语")):
    """
    使用自定义问候语
    """
    print(f"{greeting}, {name}!")

if __name__ == "__main__":
    app()

运行命令

python script.py greet Quijote --greeting "Hi"  # 输出: Hi, Quijote!
python script.py greet Quijote                  # 输出: Hello, Quijote!

greeting: str = typer.Option("Hello"):定义了一个命令行选项,默认值是 “Hello”。
--greeting "Hi":在运行时,用户可以通过 --greeting 来修改问候语。

美化错误信息
import typer

app = typer.Typer(pretty_exceptions_show_locals=True)

@app.command()
def divide(a: int, b: int):
    result = a / b  # 当 b 为 0 时,这里会抛出异常
    print(f"Result: {result}")

if __name__ == "__main__":
    app()

假如上面的代码存在1.py文件里
假如运行python 1.py 10 2
输出是Result: 5.0

不传入参数报错
在这里插入图片描述
如果运行命令 python 1.py 10 0,会抛出异常 ZeroDivisionError,输出的错误信息会详细显示局部变量 a 和 b 的值,帮助开发者快速定位问题。
看图,捕获的错误确实很pretty
在这里插入图片描述pretty_exceptions_show_locals=False的效果
在这里插入图片描述

自动生成命令行工具的帮助文档
import typer

# 创建 Typer 应用实例
app = typer.Typer()

# 定义命令
@app.command()
def greet(name: str, formal: bool = typer.Option(False, help="是否以正式方式打招呼")):
    """
    向某人打招呼

    Args:
        name: 要打招呼的人的名字
        formal: 是否使用正式的打招呼方式
    """
    if formal:
        typer.echo(f"Good day, {name}.")
    else:
        typer.echo(f"Hello, {name}!")


# 运行应用
if __name__ == "__main__":
    app()

执行 python 1.py --help
在这里插入图片描述

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

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

相关文章

Python 封装、继承和多态

在学习 Python 这门编程语言时,你会接触到一些重要的面向对象编程(OOP)概念,比如封装、继承和多态。这些概念不仅是 Python 的核心特性,也是理解和使用高级编程技巧的基础。本文将通俗易懂地解释这些概念,特…

MVC设计模式与delegate,tablview,Appdelegate,SceneDelegate

一、MVC MVC就是Model(模型)、View(视图)、Controller(控制器) 例如上面的 excel表, 数据、数据结构就是模型Model 根据数据形成的直观的、用户能直接看见的柱形图是视图View 数据构成的表格…

Linux网络——socket编程与UDP实现服务器与客户机通信

文章目录 端口号TCP/UDP网络字节序socket的常见APIUDP实现服务器与客户机通信服务器客户机运行效果如下 端口号 我们说即便是计算机网络,他们之间的通信也仍然是进程间通信 那么要如何在这么多计算机中,找到你想要的那个进程呢 在网络中标识的唯一的计…

反激电路的参数设计,基于TI-UC3843芯片,Simplis仿真验证

采用TI官方提供的UC3843芯片手册给的DEMO图,通过MATHCAD计算参数得出环路补偿的各项参数,最后使用simplis进行仿真验证,一起进行学习吧。 UCx84x 电流模式 PWM 控制器 datasheet (Rev. G) (semiee.com) UCx84x 系列控制集成电路提供了实现离…

【springboot过ingress后无法获取X-Forwarded-For头信息】

springboot过ingress后无法获取X-Forwarded-For头信息 一、现象结论修改步骤ingressspringboot 排查流程本文参考 一、现象 项目使用spring boot 2.7.18,有个新需求是校验X-Forwarded-For头的所有来源ip合法性,线上环境出现取不到X-Forwarded-For头的问…

【思博伦】史上最详细思博伦测试仪使用精讲!图解超赞超详细!!!

承接上文 目录 2.2.9.7 配置TCPFLAG 2.2.9.8 配置分片 2.2.9.9 添加VLAN标签 2.2.9.10 添加MPLS标签 2.2.9.11 添加Vntag标签 2.2.9.12 重新快速新建新的帧内容 ​​​​​​​2.2.10 导入Pcap包 2.2.11 发包配置 2.2.11.1 发包模式配置 ​​​​​​​2.2.11.2 配置…

【OJ】关于顺序表的经典题目(移除数组中指定元素的值、数组去重、合并两个有序的数组)

文章目录 前言题目1:移除数组中指定的元素题目描述解题思路方法1 :暴力法方法2:双指针法 题目2:数组去重题目描述解题思路双指针法 题目3:合并两个有序的数组题目描述解题思路方法1:暴力破解法方法2&#x…

SAP F110 批量付款付款参考(KIDNO)和分配字段(ZUONR)带入会计凭证

SAP F110 批量付款付款参考(KIDNO)和分配字段(ZUNOR)带入会计凭证 财务有个要求需要将付款建议的付款参考和分配字段写入最后的ZP凭证 最后的效果大概就是这样的 折腾了很久, 1、先是想到的GGB1的替代,但是试验了很久都没有搞定,貌似很多人遇到了这个情况。 2、然后…

初识爬虫4

1.理解代理ip,正向代理和反向代理 2.代理ip分类,根据匿名度分类:透明,匿名,高匿 3.防止频繁向同一个域名发送请求被封ip,需使用代理ip # -*- coding: utf-8 -*- import requestsurl https://www.baidu.comproxies {…

Facebook如何通过AI改变你的社交体验?

在当今数字化的社交媒体环境中,Facebook作为全球最大的社交平台之一,正在通过引入和优化人工智能(AI)技术,改变用户的社交体验。人工智能不仅帮助Facebook增强了内容推荐和信息过滤的精准度,还让平台具备了…

故障恢复(残次版)

视频地址 一:文件系统故障修复案例 模拟搞坏磁盘中的某一块 dd if/dev/zero of/dev/sdb1 bs1k count10(默认4K)1.修补分区中每个组中坏掉的超级块部分 查看超级块的备份块 dumpe2fs 磁盘位置 如: dumpe2fs /dev/sdb1使用备份超级块进行修复&#x…

Netty笔记01-Netty的基本概念与用法

文章目录 1. 概述1.1 Netty 是什么?1.2 Netty 的特点1.3 Netty 的作者1.4 Netty 的地位1.5 Netty 的优势1.6 Netty 的工作原理1.7 Netty 的应用场景1.8 Netty 的重要组件 2. 第一个程序2.1 目标2.2 服务器端2.3 客户端2.4 流程梳理💡 提示 1. 概述 1.1 …

【香菇的程序人生】七夕舔狗反诈指南:技术篇

本文设计技术分析及部分参考网站仅供技术研究及自我保护,请勿用于其他用途! 另外,为什么本文只针对"舔狗"呢?因为舔狗不愿面对事实,本文将从科学技术角度给其指点迷津~ 文章目录 1. 你的女神/男神保熟吗1.1 AI 换脸请谨…

关于ADC单次扫描和连续扫描的操作指导(STM32F103ZET6正点原子版)作者 江汉大学 计科224尹伦能

STM32CubeMX环境配置 1 ADC1配置 选中ADC1,然后勾选IN0,其余设置均默认不变(此为单次扫描,若是连续扫描,只需要将上图中的Continuous Conversion Mode由Disabled变为Enabled即可)。 2 RCC及时钟配置 选中…

分析 ECharts 图表渲染导致的内存泄漏问题 - 附解决方案

一. 引言 在今年某个可视化大屏项目中,出现了一个问题。项目在运行一段时间后,页面出现了崩溃,而且是大概运行几天之后,因为大屏项目是部署到客户现场大屏,长时间运行不关闭。报错问题如下图所示: 由于这个…

重磅发布!DeepSeek-V2.5:融合通用与代码能力的全新开源模型

前沿科技速递🚀 在人工智能飞速发展的今天,通用对话与代码生成的融合已经成为开发者高效工作的关键工具。近日,DeepSeek 团队正式发布了全新的 DeepSeek-V2.5 模型,一个强大的开源模型,它将通用语言处理与代码生成能力…

Python爱心射线

系列目录 序号直达链接表白系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Python无限弹窗满屏表白代码4Python李峋同款可写字版跳动的爱心5Python流星雨代码6Python漂浮爱心代码7Python爱心光波代码8Python普通的玫瑰花代码9Python炫酷的玫瑰花代码10Python多…

高效录屏攻略:电脑视频录制时声音同步捕获技巧,轻松搞定高清音质

在当今数字化时代,无论是在线教育、远程工作还是内容创作,录制视频已经成为我们生活中不可或缺的一部分。但是,很多人在录制视频时都会遇到一个问题:如何同时录制声音?如果你也在为此烦恼,那么这篇文章将为…

OpenCV通过鼠标提前ROI(C++实现)

文章目录 鼠标绘制矩形提取ROI任意形状绘制提前ROI 废话不多说&#xff0c;直接上代码 鼠标绘制矩形提取ROI #include <iostream> #include <opencv2\opencv.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/core/core.hpp>us…

算法_优先级队列---持续更新

文章目录 前言最后一块石头重量题目要求题目解析代码如下 数据流中的第K大元素题目要求题目解析代码如下 前K个高频单词题目要求题目解析代码如下 数据流的中位数题目要求题目解析代码如下 前言 本文将会向你分享优先级队列相关的题目&#xff1a;最后一块石头重量、数据流中的…