Re: [討論] Python 3.10將加入Switch-Case語句
※ 引述《ohmylove347 (米特巴爾)》之銘言:
: https://reurl.cc/8yzA24
: 上面說2006年 PEP 3103就建議實施switch-case語句。但是,在PyCon 2007上的一項民意調查未獲得對該功能的支持後,Python開發人員將其刪除。
: 沒有使用Python不知道生態系如何
: Google App上看到的文章
: 不知道各位大大對Switch加入有什麼看法
: -----
: Sent from JPTT on my Google Pixel 2.
討論這麼熱烈
可是各位有點進去把它看完嗎XD
Python 3.10 的 Structural Pattern Matching 不是單純的 switch-case 而已
它的 case 裡是還可以放變數給它賦值的(不知道怎麼準確描述
舉個官網的例子,還可以這樣用:
Patterns with a literal and variable
-----------------------------
# 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")
-----------------------------
Nested patterns
-----------------------------
match points:
case []:
print("No points in the list.")
case [Point(0, 0)]:
print("The origin is the only point in the list.")
case [Point(x, y)]:
print(f"A single point {x}, {y} is in the list.")
case [Point(0, y1), Point(0, y2)]:
print(f"Two points on the Y axis at {y1}, {y2} are in the list.")
case _:
print("Something else is found in the list.")
-----------------------------
還有那篇文章舉的,在PEP 635 裡的例子:
-----------------------------
match x:
case host, port:
mode = "http"
case host, port, mode:
pass
-----------------------------
可以取代:
-----------------------------
if isinstance(x, tuple) and len(x) == 2:
host, port = x
mode = "http"
elif isinstance(x, tuple) and len(x) == 3:
host, port, mode = x
-----------------------------
在某些場合下能省下來的 if-else 比單純的 switch-case 多不少
如果只是單純的 switch-case
早在十幾年前的 PEP 275、PEP 3103 之類的就被 reject 了
官方 document 和 PEP 635 裡還有舉一些其它用法的例子
有興趣的可以再點進去看
Reference:
What’s New In Python 3.10
https://docs.python.org/3.10/whatsnew/3.10.html
PEP 634 -- Structural Pattern Matching: Specification
https://www.python.org/dev/peps/pep-0634/
PEP 635 -- Structural Pattern Matching: Motivation and Rationale
https://www.python.org/dev/peps/pep-0635/
--
其實我看了, 但是我看不懂... XD
覺得比較像前面有人推過的 ocaml pattern matching
不只是一堆 if else 簡單可以取代
嗯...看起來很像是rust的matching pattern
在結合了enum後可以達到很強大的效果
c#也一樣啊
C#的switch越來越好用
普通的switch是對單一數值匹配,這邊是對一組資料做匹配
你講到重點了 這次改動是考量syntax sugar 前面一堆在
討論效能 蠻好笑的
就是 pattern matching 啊,本質上是 syntax auger,和
Scala 的作法類似。
推
4
話說我只是想分享一下我前一陣子在 twitter 上面看到的討論 簡短的來說就是某 PL 強者認真的研究了一下 PEP 622,然後提出了質疑。 (對,我知道不是 635 但我只是要分享這件有趣的事情) 先附上原文: TL;DR 是這樣的8
一回神竟然引發這些有趣的討論. 來稍微介紹一下我的工作背景: 我是在上市公司做高效能運算的單位主管. 算什麼無聊東西就不要問了, 不過特別強調, 不是博弈或者加密貨幣. :D 我的一個 block 通常會吃掉 100%~500% CPU, 生命期介於 2~48 hours. 執行階段佔用記憶體大概是 20GB~30GB 之間, 偶爾會用到 memory map.1
我個人是很討厭很多if-else, 或是switch case. 並不是說不好, 只是很容易出現有些section是code, 有些是function. 案子急一點, 重覆的code就會很多. 幾百個if-else/switch-case就有機會變成上萬行的code. 這個就很阿雜了. 就之前數字區間的code, 我是會往這個方向走12
: : 沒有使用Python不知道生態系如何 : Google App上看到的文章 : 不知道各位大大對Switch加入有什麼看法 :22
首Po上面說2006年 PEP 3103就建議實施switch-case語句。但是,在PyCon 2007上的一項民意調查未獲得對該功能的支持後,Python開發人員將其刪除。 沒有使用Python不知道生態系如何 Google App上看到的文章 不知道各位大大對Switch加入有什麼看法
21
[情報] S22系列官方殼現已曝光英國購物網MobileFun現已出現S22系列的官方殼 Silicone Case 也就是俗稱的液態矽膠殼11
[問卦] 直銷跟保險都去哪談case直銷跟保險都去哪談case 我看每次有人去薩利亞或三商巧福 談case 店員就會用很藐視的眼神 跟很不好的態度對待他們7
[影音] Stray Kids - "CASE 143" M/V Teaser□ "CASE 143" M/V Teaser 1 □ □ "CASE 143" M/V Teaser 2 □4
Re: [問卦] 三扇門的問題 33.3% or 50%安安,理論鄉民都回很多了,其實我們自己玩個十萬次就好啦 先決定有幾扇門,然後先隨機選個答案 法一:再隨便選扇門,直接對答案 法二:主持人從非答題者選的門以及正確答案中,再隨機選出一扇門打開 接著答題者從非自己第一次選的門,以及非剛才主持人選的門中,4
[問卦] 為什麼 PHP 被歧視啊?如果用 Google 的搜尋提示搜 PHP is php (Google 搜尋) is php outdated is php dead is php bad5
Re: [討論] 寫三元判斷式code review被打槍好啦 假設不是反串 我覺得滿有道理的 但有一點其實你說錯了 其實並不是語法進步 之前學 Rust 覺得哇 pattern matching 真是他媽神 好潮喔 後來跑去學 OCaml 我才發現(Rust設計者是OCaml粉 一開始的compiler就是用OCaml寫)2
Re: [問卦] 三扇門的問題 33.3% or 50%趨近於一是因為這程式寫的是主持人只移掉一扇門 選擇者要換門還是從剩下的門重選一個 100扇門移掉一扇還是剩99扇 當然你換不換都會接近1%勝率 換還是高點 我改了一下換成主持人全部移掉只留兩扇的版本 你可以試試看 import random