iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python 中pass和match使用方法
  • 453
分享到

python 中pass和match使用方法

2024-04-02 19:04:59 453人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

前言 ​​pass​​ 语句不执行任何操作。语法上需要一个语句,但程序不实际执行任何动作时,可以使用该语句。 例如: >>> while True: ..

前言

​pass​​ 语句不执行任何操作。语法上需要一个语句,但程序不实际执行任何动作时,可以使用该语句。

例如:

>>> while True:
... pass # Busy-wait for keyboard interrupt (Ctrl+C)
...

下面这段代码创建了一个最小的类:

>>> class MyEmptyClass:
... pass
...

​pass​​​ 还可以用作函数或条件子句的占位符,让开发者聚焦更抽象的层次。此时,程序直接忽略 ​​pass​​:>>>

>>> def initlog(*args):
... pass # Remember to implement this!
...

match​​ 语句

A ​​match​​ statement takes an expression and compares its value to successive patterns given as one or more case blocks. This is superficially similar to a switch statement in C, Java or javascript (and many other languages), but it can also extract components (sequence elements or object attributes) from the value into variables.

最简单的形式是将一个目标值与一个或多个字面值进行比较:

def Http_error(status):
match status:
case 400:
return "Bad request"
case 404:
return "Not found"
case 418:
return "I'm a teapot"
case _:
return "Something's wrong with the internet"

注意最后一个代码块:“变量名” ​​_​​ 被作为 通配符 并必定会匹配成功。 如果没有 case 语句匹配成功,则不会执行任何分支。使用 ​​|​​ (“ or ”)在一个模式中可以组合多个字面值:

case 401 | 403 | 404:
return "Not allowed"

模式的形式类似解包赋值,并可被用于绑定变量:

# point is an (x, y) tuple
match point:
case (0, 0):
print("Origin")
case (0, y):
print(f"Y={y}")
case (x, 0):
print(f"X={x}")
case (x, y):
print(f"X={x}, Y={y}")
case _:
raise ValueError("Not a point")

请仔细研究此代码! 第一个模式有两个字面值,可以看作是上面所示字面值模式的扩展。但接下来的两个模式结合了一个字面值和一个变量,而变量 绑定 了一个来自目标的值(​​point​​​)。第四个模式捕获了两个值,这使得它在概念上类似于解包赋值 ​​(x, y) = point​​。

如果使用类实现数据结构,可在类名后加一个类似于构造器的参数列表,这样做可以把属性放到变量里:

class Point:
x: int
y: int

def where_is(point):
match point:
case Point(x=0, y=0):
print("Origin")
case Point(x=0, y=y):
print(f"Y={y}")
case Point(x=x, y=0):
print(f"X={x}")
case Point():
print("Somewhere else")
case _:
print("Not a point")

可在 dataclass 等支持属性排序的内置类中使用位置参数。还可在类中设置 ​​__match_args__​​​ 特殊属性为模式的属性定义指定位置。如果它被设为 ("x", "y"),则以下模式均为等价的,并且都把 ​​y​​​ 属性绑定到 ​​var​​ 变量:

Point(1, var)
Point(1, y=var)
Point(x=1, y=var)
Point(y=var, x=1)

读取模式的推荐方式是将它们看做是你会在赋值操作左侧放置的内容的扩展形式,以便理解各个变量将会被设置的值。 只有单独的名称(例如上面的 ​​var​​​)会被 match 语句所赋值。 带点号的名称 (例如 ​​foo.bar​​​)、属性名称(例如上面的 ​​x=​​​ 和 ​​y=​​​)或类名称(通过其后的 "(...)" 来识别,例如上面的 ​​Point​​)都绝不会被赋值。

模式可以任意地嵌套。例如,如果有一个由点组成的短列表,则可使用如下方式进行匹配:

match points:
case []:
print("No points")
case [Point(0, 0)]:
print("The origin")
case [Point(x, y)]:
print(f"Single point {x}, {y}")
case [Point(0, y1), Point(0, y2)]:
print(f"Two on the Y axis at {y1}, {y2}")
case _:
print("Something else")

为模式添加成为守护项的 ​​if​​​ 子句。如果守护项的值为假,则 ​​match​​ 继续匹配下一个 case 语句块。注意,值的捕获发生在守护项被求值之前:

match point:
case Point(x, y) if x == y:
print(f"Y=X at {x}")
case Point(x, y):
print(f"Not on the diaGonal")

match 语句的其他特性:

  • 与解包赋值类似,元组和列表模式具有完全相同的含义,并且实际上能匹配任意序列。 但它们不能匹配迭代器或字符串
  • 序列模式支持扩展解包操作:​​[x, y, *rest]​​​和​​(x, y, *rest)​​​的作用类似于解包赋值。 在​​*​​​之后的名称也可以为​​_​​​,因此,​​(x, y, *_)​​可以匹配包含至少两个条目的序列,而不必绑定其余的条目。
  • Mapping patterns:​​{"bandwidth": b, "latency": l}​​​captures the​​"bandwidth"​​​and​​"latency"​​​values from a dictionary. Unlike sequence patterns, extra keys are ignored. An unpacking like​​**rest​​​is also supported. (But​​**_​​would be redundant, so it is not allowed.)
  • 使用​​as​​关键字可以捕获子模式:
case (Point(x1, y1), Point(x2, y2) as p2): ...
  • 将把输入的第二个元素捕获为​​p2​​(只要输入是包含两个点的序列)
  • 大多数字面值是按相等性比较的,但是单例对象​​True​​​,​​False​​​和​​None​​则是按标识号比较的。
  • 模式可以使用命名常量。 这些命名常量必须为带点号的名称以防止它们被解读为捕获变量:
from enum import Enum
class Color(Enum):
RED = 'red'
GREEN = 'green'
BLUE = 'blue'

color = Color(input("Enter your choice of 'red', 'blue' or 'green': "))

match color:
case Color.RED:
print("I see red!")
case Color.GREEN:
print("Grass is green")
case Color.BLUE:
print("I'm feeling the blues :(")

到此这篇关于python 中pass和match使用方法的文章就介绍到这了,更多相关Python pass和match内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: python 中pass和match使用方法

本文链接: https://www.lsjlt.com/news/119962.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python 中pass和match使用方法
    前言 ​​pass​​ 语句不执行任何操作。语法上需要一个语句,但程序不实际执行任何动作时,可以使用该语句。 例如: >>> while True: .....
    99+
    2022-11-11
  • python中get pass用法
    python中getpass 模块的作用是输入密码不可见 运行到这脚本不继续运行下去, 打开pycharm中的terminal 如上图显示,password中有输入密码,但不显示   ...
    99+
    2023-01-30
    python pass
  • python的match方法怎么使用
    在Python中,可以使用`match`方法来对一个字符串进行正则表达式匹配。首先,需要导入`re`模块:```pythonimpo...
    99+
    2023-08-30
    python match
  • javascript中search和match方法如何使用
    javascript中search和match方法如何使用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。search和match都是jav...
    99+
    2022-10-19
  • javascript如何使用match()方法
    这篇文章主要介绍了javascript如何使用match()方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。match()var str = ...
    99+
    2023-06-17
  • 怎么在python中使用正则match( )方法匹配目标
    这期内容当中小编将会给大家带来有关怎么在python中使用正则match( )方法匹配目标,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、正则表达式作用给定的字符串是否符合正则表达式的过滤逻辑(“匹配”...
    99+
    2023-06-14
  • 在 Python 3.10 中使用“match...case”
    “match...case”语法类似于其他面向对象语言中的 switch 语句,它旨在使结构与 case 的匹配更容易。让我们开始.语法“match...case”语法如下:def greeting(message): match mess...
    99+
    2023-05-14
    代码 Python 语法
  • 如何在python中使用pass占位符
    如何在python中使用pass占位符?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、...
    99+
    2023-06-14
  • Python中条件语句、循环语句和pass语句的使用示例
    目录一、条件语句1、if……else……语句 1)单分支2)双分支 2、if…&hellip...
    99+
    2022-11-11
  • Python中方法链的使用方法
    方法链(method chaining)是面向对象的编程语言中的一种常见语法,可以让开发者在只引用对象一次的情况下,对同一个对象进行多次方法调用。举个例子: 假设我们有一个Foo类,其中包含有两个方法——b...
    99+
    2022-06-04
    使用方法 方法 Python
  • Python中的类和方法使用举例
    1.类的属性 成员变量对象的创建创建对象的过程称之为实例化,当一个对象被创建后,包含三个方面的特性对象聚丙属性和方法,句柄用于区分不同的对象,对象的属性和方法,与类中的成员变量和成员函数对应,obj = MyClass()创建类的一个实例,...
    99+
    2023-01-31
    方法 Python
  • python中 os._exit() 和 sys.exit()方法如何使用
    python中 os._exit() 和 sys.exit()方法如何使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。os._exit() 和 sys.exit()os._e...
    99+
    2023-06-02
  • Python中使用__hash__和__eq__方法的问题
    目录Python使用__hash__和__eq__的问题Python类中特殊方法__eq__和__hash__关系Python使用__hash__和__eq__的问题 代码版本3.6...
    99+
    2022-11-11
  • Python中静态方法,类方法,属性方法使用方法
    目录1.静态方法2.类方法3.静态方法与类方法总结4.属性方法1.静态方法 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普...
    99+
    2022-11-11
  • python中ThreadPoolExecutor的使用方法
    本篇内容介绍了“python中ThreadPoolExecutor的使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!说明ThreadP...
    99+
    2023-06-20
  • python中import的使用方法
    这篇文章主要介绍python中import的使用方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!使用python中import的方法:1、【import module_name】,即import后直接接模块名;2、...
    99+
    2023-06-07
  • python中使用pandas.merge的方法
    这篇文章将为大家详细讲解有关python中使用pandas.merge的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前...
    99+
    2023-06-14
  • Python中yield的使用方法
    这篇文章主要介绍“Python中yield的使用方法”,在日常操作中,相信很多人在Python中yield的使用方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中yield的使用方法”的疑惑有所...
    99+
    2023-06-15
  • python中isnumeric的使用方法
    这篇文章主要介绍python中isnumeric的使用方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、说明判断字符串是否只由数字(支持罗马数字、汉字数字等)组成。如果字符串只由数字组成,则返回True,否则返回...
    99+
    2023-06-15
  • Python中super方法的使用
    本篇内容主要讲解“Python中super方法的使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中super方法的使用”吧!前言super() 的入门使用在类的继承中,如果重定义某...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作