首页 > 编程语言 >python内置模块typing里Literal函数的基本用法和总结--快速学习掌握Literal函数的用法

python内置模块typing里Literal函数的基本用法和总结--快速学习掌握Literal函数的用法

时间:2024-09-29 09:50:33浏览次数:9  
标签:None set 函数 color 用法 Literal mode def

Literal 是 Python typing 模块中提供的一种类型注解,用于指定变量或函数的参数只能取特定的字面量值(常量)。它允许你将变量的取值严格限制在指定的一组值内,确保程序只接受特定的常量值,从而减少错误的发生。

一、基本概念

在 Python 中,通常我们会使用常见的类型注解来限制变量的类型,例如 int, str, bool 等。然而,有时我们想要进一步限制一个变量只能取某些特定的值,而不仅仅是某个类型。例如,假设我们有一个变量 color,并且我们希望它只能是 “red”、“green” 或 “blue”,这时我们就可以使用 Literal 来实现这种约束。

二、基本用法

from typing import Literal

def set_color(color: Literal["red", "green", "blue"]) -> None:
    print(f"The color is {color}")

在这个例子中,函数 set_color 的参数 color 被限制为只能取 “red”、“green” 或 “blue” 这三个值。任何其他值都会引发类型错误。

set_color("red")   # 输出: The color is red
set_color("green") # 输出: The color is green
set_color("yellow")  # 类型检查工具会报错:Argument 1 to "set_color" has incompatible type "str"; expected "Literal['red', 'green', 'blue']"

在上述错误示例中,“yellow” 虽然是字符串类型,但因为它不在 Literal 的定义范围之内,所以类型检查工具会抛出错误。

三、常见用法

限制函数参数使用 Literal 可以限制传递给函数的参数只能是某些固定的值。例如某个函数需要接收特定的命令或选项。

def open_file(mode: Literal["r", "w", "a"]) -> None:
    pass

在这里,mode 参数只能是 “r”(读)、“w”(写)或 “a”(追加)。

配置项或状态:有时候在某些配置或状态管理中,我们希望某个属性只支持一些固定的状态值。

class Connection:
    def __init__(self, state: Literal["open", "closed", "error"]):
        self.state = state

这样可以明确地表达状态,并避免使用不合法的状态值。

四、Literal 的优点

  • 提高代码的可读性和安全性:通过使用 Literal,我们可以清楚地表达某个值的有效取值范围,代码的意图更加明确。
  • 防止错误:类型检查器会在编译时捕获不合法的值,减少运行时的潜在错误。
  • 自动补全和类型提示:许多 IDE(如 PyCharm、VSCode)支持 Literal 的自动补全功能,开发时更方便。
from typing import Literal

def set_mode(mode: Literal["auto", "manual"]) -> str:
    if mode == "auto":
        return "Automatic mode selected"
    else:
        return "Manual mode selected"
      

set_mode("a")  # 自动提示:"auto", "manual"

五、高级用法

组合字面量类型: 你可以使用不同类型的字面量组合,例如同时限制字符串和数字:

from typing import Literal

def process(value: Literal["low", "medium", "high", 1, 2, 3]) -> None:
    pass

布尔值字面量: 可以限制一个变量只能为 True 或 False:

def toggle(state: Literal[True, False]) -> None:
    pass

None 作为字面量: 如果你想让参数的默认值为 None,也可以通过 Literal 实现:

def example(option: Literal[None, "option1", "option2"] = None):
    pass

六、总结

Literal 限定一个变量只能取特定的值(字面量),而不仅仅是类型
通过 Literal,可以在类型注解中指定函数的参数或类的属性只能接受一组有限的常量值。
它提高了代码的安全性,减少了潜在的运行时错误,尤其适用于函数参数、配置项、状态管理等场景。

标签:None,set,函数,color,用法,Literal,mode,def
From: https://blog.csdn.net/weixin_51930093/article/details/142627750

相关文章

  • 【TypeScript】函数详解:参数和返回值的类型注解
    文章目录一、函数基础概述1.参数类型注解2.参数个数检查3.可选参数和默认值二、返回值类型注解1.基本的返回值类型注解2.自动类型推断三、异步函数与Promise返回值类型四、匿名函数与上下文类型推断五、高阶函数与回调六、总结TypeScript是JavaScript的......
  • 【C++掌中宝】用最少的话让你全方位理解内联函数
    文章目录引言1.什么是内联函数2.工作原理3.内联函数的编程风格4.使用限制5.内联函数与宏的比较6.优缺点7.何时使用内联函数8.补充9.总结结语引言在C++编程中,函数的调用开销是程序运行效率的一个重要影响因素。为了解决频繁调用函数时的性能问题,C++提供了内......
  • 学习一下Array.reduce函数的使用
    今天面试遇到一个问题,如下:实现一个函数,把[{name:"Alice",age:10},{name:"Bob",age:20}]转换成{Alice:10,Bob:20}然后我用for循环加Object.values的方法实现了,面试这时候问,能不能用reduce实现?答,当然是可以的,可惜我对reduce使用的并不熟练,现在来学习一下。 ......
  • 从汇编视角解析函数调用中的堆栈运作
    引言汇编语言是计算机硬件操作的最直接表达方式,通过汇编代码可以深入理解计算机底层的工作机制。本文将以一个简单的C语言代码为例,深入分析其对应的汇编代码中的堆栈变化,探讨计算机在执行过程中如何通过堆栈来进行函数调用、参数传递和结果返回。C语言代码与汇编代码概述我们......
  • PermissionHandler包的用法
    文章目录概念介绍使用方法示例代码经验分享我们在上一章回中介绍了局部动态列表相关的内容,本章回中将介绍权限管理包permission_hanadler.闲话休提,让我们一起TalkFlutter吧。概念介绍权限是使用某种功能的授权,比如使用手机上的相机就是获取相机相关的权限......
  • 【C语言】字符函数和字符串函数(1)
    文章目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现四、strcpy的使用和模拟实现五、strcat的使用和模拟实现六、strcmp的使用和模拟实现一、字符分类函数  C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的,这些......
  • 友元运算符重载函数
    目录1.定义友元运算符重载函数的语法形式2.双目运算符重载3.单目运算符重载1.定义友元运算符重载函数的语法形式        (1)在类的内部,定义友元运算符重载函数的格式如下:friend函数类型operator运算符(形参表){函数体}        (2)在类中,声明友......
  • 【Kotlin 集合概述】可变参数vararg、中缀函数infix以及解构声明(二十)
    导读大纲1.1使用集合:vararg、infix调用和解构声明1.1.1扩展Java集合API1.1.2vararg:接受任意数量参数的函数1.1.3处理pairs:Infix调用和解构声明1.1使用集合:vararg、infix调用和解构声明本节将介绍Kotlin标准库中用于处理集合的一些函数同时......
  • Python函数的魔法:定义与调用的艺术
    引言:你是否曾被代码困住?想象一下,你正在编写一个复杂的程序,突然间,代码的逻辑变得混乱不堪,像是一团乱麻。你是否曾经想过,为什么有些代码看起来如此简洁,而有些却让人头疼不已?答案往往在于函数的使用。函数不仅是代码的“魔法师”,更是我们编程旅程中的得力助手。在这篇文章中,我们......
  • C++ day02(函数、类和对象、封装、构造函数、析构函数)
    目录【1】函数1》内联函数inline 2》函数重载overload  3》函数的参数默认(缺省)值 4》哑元函数【2】类和对象1》类的定义 2》创建对象 【3】封装 【4】构造函数constructor1》基础使用2》构造初始化列表 3》构造函数的调用方式 4》拷贝构造函数1>概......