最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python?中pass和match使用方法

 更新時(shí)間:2022年08月12日 10:41:31   作者:D八哥卷  
這篇文章主要介紹了python中pass和match使用方法,?pass???語句不執(zhí)行任何操作。語法上需要一個(gè)語句,但程序不實(shí)際執(zhí)行任何動(dòng)作時(shí),可以使用該語句

前言

??pass?? 語句不執(zhí)行任何操作。語法上需要一個(gè)語句,但程序不實(shí)際執(zhí)行任何動(dòng)作時(shí),可以使用該語句。

例如:

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

下面這段代碼創(chuàng)建了一個(gè)最小的類:

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

??pass??? 還可以用作函數(shù)或條件子句的占位符,讓開發(fā)者聚焦更抽象的層次。此時(shí),程序直接忽略 ??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.

最簡單的形式是將一個(gè)目標(biāo)值與一個(gè)或多個(gè)字面值進(jìn)行比較:

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"

注意最后一個(gè)代碼塊:“變量名” ??_?? 被作為 通配符 并必定會(huì)匹配成功。 如果沒有 case 語句匹配成功,則不會(huì)執(zhí)行任何分支。使用 ??|?? (“ or ”)在一個(gè)模式中可以組合多個(gè)字面值:

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")

請(qǐng)仔細(xì)研究此代碼! 第一個(gè)模式有兩個(gè)字面值,可以看作是上面所示字面值模式的擴(kuò)展。但接下來的兩個(gè)模式結(jié)合了一個(gè)字面值和一個(gè)變量,而變量 綁定 了一個(gè)來自目標(biāo)的值(??point???)。第四個(gè)模式捕獲了兩個(gè)值,這使得它在概念上類似于解包賦值 ??(x, y) = point??。

如果使用類實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu),可在類名后加一個(gè)類似于構(gòu)造器的參數(shù)列表,這樣做可以把屬性放到變量里:

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 等支持屬性排序的內(nèi)置類中使用位置參數(shù)。還可在類中設(shè)置 ??__match_args__??? 特殊屬性為模式的屬性定義指定位置。如果它被設(shè)為 ("x", "y"),則以下模式均為等價(jià)的,并且都把 ??y??? 屬性綁定到 ??var?? 變量:

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

讀取模式的推薦方式是將它們看做是你會(huì)在賦值操作左側(cè)放置的內(nèi)容的擴(kuò)展形式,以便理解各個(gè)變量將會(huì)被設(shè)置的值。 只有單獨(dú)的名稱(例如上面的 ??var???)會(huì)被 match 語句所賦值。 帶點(diǎn)號(hào)的名稱 (例如 ??foo.bar???)、屬性名稱(例如上面的 ??x=??? 和 ??y=???)或類名稱(通過其后的 "(...)" 來識(shí)別,例如上面的 ??Point??)都絕不會(huì)被賦值。

模式可以任意地嵌套。例如,如果有一個(gè)由點(diǎn)組成的短列表,則可使用如下方式進(jìn)行匹配:

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")

為模式添加成為守護(hù)項(xiàng)的 ??if??? 子句。如果守護(hù)項(xiàng)的值為假,則 ??match?? 繼續(xù)匹配下一個(gè) case 語句塊。注意,值的捕獲發(fā)生在守護(hù)項(xiàng)被求值之前:

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 語句的其他特性:

  • 與解包賦值類似,元組和列表模式具有完全相同的含義,并且實(shí)際上能匹配任意序列。 但它們不能匹配迭代器或字符串。
  • 序列模式支持?jǐn)U展解包操作:??[x, y, *rest]???和??(x, y, *rest)???的作用類似于解包賦值。 在??*???之后的名稱也可以為??_???,因此,??(x, y, *_)??可以匹配包含至少兩個(gè)條目的序列,而不必綁定其余的條目。
  • 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??關(guān)鍵字可以捕獲子模式:
case (Point(x1, y1), Point(x2, y2) as p2): ...
  • 將把輸入的第二個(gè)元素捕獲為??p2??(只要輸入是包含兩個(gè)點(diǎn)的序列)
  • 大多數(shù)字面值是按相等性比較的,但是單例對(duì)象??True???,??False???和??None??則是按標(biāo)識(shí)號(hào)比較的。
  • 模式可以使用命名常量。 這些命名常量必須為帶點(diǎn)號(hào)的名稱以防止它們被解讀為捕獲變量:
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 :(")

到此這篇關(guān)于python 中pass和match使用方法的文章就介紹到這了,更多相關(guān)python pass和match內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Pandas.DataFrame轉(zhuǎn)置的實(shí)現(xiàn)

    Pandas.DataFrame轉(zhuǎn)置的實(shí)現(xiàn)

    這篇文章主要介紹了Pandas.DataFrame轉(zhuǎn)置的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • python中append函數(shù)用法講解

    python中append函數(shù)用法講解

    在本篇文章里小編給大家整理的是一篇關(guān)于python中append函數(shù)用法講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-12-12
  • Python?中OS?module的使用詳解

    Python?中OS?module的使用詳解

    這篇文章主要介紹了Python?中OS?module的使用詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • matplotlib繪制鼠標(biāo)的十字光標(biāo)的實(shí)現(xiàn)(自定義方式,官方實(shí)例)

    matplotlib繪制鼠標(biāo)的十字光標(biāo)的實(shí)現(xiàn)(自定義方式,官方實(shí)例)

    這篇文章主要介紹了matplotlib繪制鼠標(biāo)的十字光標(biāo)(自定義方式,官方實(shí)例),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Python爬取英雄聯(lián)盟MSI直播間彈幕并生成詞云圖

    Python爬取英雄聯(lián)盟MSI直播間彈幕并生成詞云圖

    很開心RNG最近在英雄聯(lián)盟季中賽奪冠了,特地爬取了直播間彈幕并生成詞云圖,大家一起開心一下,看看奪冠時(shí)大家都在說什么,需要的朋友可以參考下
    2021-06-06
  • Python技巧之變長和定長序列拆分

    Python技巧之變長和定長序列拆分

    這篇文章主要給大家分享的是Python技巧之變長和定長序列拆分,Python中的任何序列(可迭代的對(duì)象)都可以通過賦值操作進(jìn)行拆分,包括但不限于元組、列表、字符串、文件、迭代器、生成器等。想了解更多詳細(xì)的小伙伴請(qǐng)參考下面文章內(nèi)容
    2021-12-12
  • python創(chuàng)建字典的幾種常見方法

    python創(chuàng)建字典的幾種常見方法

    本文主要介紹了python創(chuàng)建字典的幾種常見方法,包括包括直接賦值法、內(nèi)置函數(shù)dict()和字典推導(dǎo)式,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-03-03
  • python實(shí)現(xiàn)去掉字符串中的\xa0、\t、\n

    python實(shí)現(xiàn)去掉字符串中的\xa0、\t、\n

    這篇文章主要介紹了python實(shí)現(xiàn)去掉字符串中的\xa0、\t、\n方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 簡單介紹Python2.x版本中的cmp()方法的使用

    簡單介紹Python2.x版本中的cmp()方法的使用

    這篇文章主要介紹了簡單介紹Python2.x版本中的cmp()方法的使用,然而該方法在Python3.x版本中已并不再內(nèi)置...需要的朋友可以參考下
    2015-05-05
  • 如何通過python的fabric包完成代碼上傳部署

    如何通過python的fabric包完成代碼上傳部署

    這篇文章主要介紹了如何通過python的fabric包完成代碼上傳部署,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07

最新評(píng)論

黄山市| 公安县| 砀山县| 米泉市| 广昌县| 青铜峡市| 招远市| 永德县| 金门县| 合山市| 天津市| 宜黄县| 雅安市| 彝良县| 会泽县| 昌平区| 寿阳县| 东光县| 彭水| 日照市| 衢州市| 贺州市| 武胜县| 新安县| 怀化市| 肥西县| 平和县| 馆陶县| 内江市| 沙洋县| 法库县| 临夏市| 水富县| 蒙阴县| 嘉兴市| 台州市| 哈巴河县| 叶城县| 潜山县| 特克斯县| 汉川市|