一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python 居然開始抄作業了,這次抄的是Rust

Python 居然開始抄作業了,這次抄的是Rust

2021-10-28 21:38Python作業輔導員天元浪子 Python

眾所周知,Rust有兩樣鎮山之寶,一是安全的內存模型,二是模式匹配。在內存管理上,Python使用了傳統的垃圾回收的內存模型,和Rust沒有多少可比性。隨著Python3.10的發布,模式匹配被引入到Python中,而且幾乎是完全照搬了Rust的概

Python 居然開始抄作業了,這次抄的是Rust

整個九月份,我都在忙一個js的項目。因為好多年不寫js,動手之前特地找了一些js的資料惡補半天,結果發現js越來越像Python了。且不說js從基于原型的面向對象轉向了基于類的面向對象,單是類型化數組(Typed Arrays)的引入,就讓用慣了NumPy的我喜出望外。另外,js的數組推導式和裝飾器,也幾乎是完全照抄了Python的作業。

進入十月,Python社區指導委員會正式推出了Python3.10,距離上一個版本發布,正好過去了一年。記得Python3.9發布之后沒幾天,我寫過一篇名為《危險的轉變:Python正在從簡明轉向臃腫,從實用轉向媚俗》的博文,著實吐槽了一番,正所謂愛之也深恨之也切。這次新版本發布,我自然不會放過嘗鮮的機會,趕緊安裝嘗試了一下,卻發現,一向特立獨行的Python居然開始抄作業了,這次抄的是Rust

眾所周知,Rust有兩樣鎮山之寶,一是安全的內存模型,二是模式匹配。在內存管理上,Python使用了傳統的垃圾回收的內存模型,和Rust沒有多少可比性。隨著Python3.10的發布,模式匹配被引入到Python中,而且幾乎是完全照搬了Rust的概念。Rust支持模式匹配中的變量綁定、結構體/元組解構、守衛條件判斷、數值范圍匹配等特性,Python照單全收,連下劃線 _ 匹配任意情形也原封不動地繼承了過來。

讓我們一起來揭開Pyhton3.10最重要的升級——模式匹配的蓋頭。

類似C語言的switch case, Python的模式匹配最簡單的應用就是對字面值進行匹配:

  1. >>>a=3
  2. >>>match(a):
  3. case1:
  4. print("a==1")
  5. case2:
  6. print("a==2")
  7. case_:#default
  8. print("other")
  9. other

case語句中,支持或操作:

  1. >>>importdatetime
  2. >>>n=datetime.datetime.now()
  3. >>>match(n.weekday()):
  4. case0|1|2|3|4:print("工作日")
  5. case5|6:print("周末")
  6. 工作日

除了字面值外,case語句,支持對上面提到的模式進行解構,如對元組:

  1. >>>a=(0,1)
  2. >>>match(a):
  3. case(0,y):#匹配所有第0個元素是0的元組
  4. print(f"a[0]==0,a[1]=={y}")
  5. case(x,0):#匹配所有第1個元素是0的元組
  6. print(f"a[1]==0,a[0]=={x}")
  7. a[0]==0,a[1]==1

對列表:

  1. >>>cmd="lstest"
  2. >>>match(cmd.split()):
  3. case["ls",path]:print(f"顯示{path}中的文件和目錄")
  4. case["rm",path]:print(f"刪除{path}中的文件和目錄")
  5. case["cp",src,dest]:print(f"將{src}復制到{dest}")
  6. 顯示test中的文件和目錄

對字典:

  1. >>>a={"name":"xxx","age":40,"job":"程序員"}
  2. >>>match(a):
  3. case{"name":name,"age":age,"job":"程序員"}:
  4. print(f"他是一名程序員,名字叫{name},{age}歲了")
  5. case{"name":name,"age":age,"job":"教師"}:
  6. print(f"他是一名人民教師,名字叫{name},{age}歲了")
  7. 他是一名程序員,名字叫xxx,40歲了

對于類對象,match case照樣可以使用如:

  1. >>>classPoint():
  2. def__init__(self,x,y):
  3. self.x=x
  4. self.y=y
  5. >>>a=Point(1,2)
  6. >>>match(a):
  7. casePoint(x=1,y=y):print(f"這是一個X坐標為1的點,它的Y坐標為{y}")
  8. casePoint(x=x,y=2):print(f"這是一個Y坐標為2的點,它的X坐標為{x}")
  9. 這是一個X坐標為1的點,它的Y坐標為2

也可以用于多個類:

  1. >>>classProgrammer:
  2. def__init__(self,lang):
  3. self.lang=lang
  4. >>>classTeacher:
  5. def__init__(self,subject):
  6. self.subject=subject
  7. >>>a=Programmer("Python")
  8. >>>match(a):
  9. caseProgrammer(lang="Python"):print("咱們都是Pyhon程序員!")
  10. caseProgrammer():print("原來你也是一名程序員!")
  11. caseTeacher():print("向人民教師致敬!")
  12. 咱們都是Pyhon程序員!

case 語句后,還支持添加一個if語句,進一步對匹配的條件進行限制,這個if語句,被稱之為“守衛”。如:

  1. >>>classPoint():
  2. def__init__(self,x,y):
  3. self.x=x
  4. self.y=y
  5. >>>a=Point(2,2)
  6. >>>match(a):
  7. casePoint(x=x,y=y)ifx==y:print("這個點在斜率為1的直線上")
  8. casePoint(x=x,y=y)ifx==-y:print("這個點在斜率為-1的直線上")
  9. 這個點在斜率為1的直線上

美中不足的是,我沒有找到case語句中直接使用范圍的方法,但這個可以用守衛來解決:

  1. >>>a=5
  2. >>>match(a):
  3. casexif1<=x<10:print("數字在1和10之間")
  4. casexif10<=x<20:print("數字在10和20之間")
  5. 數字在1和10之間

原文鏈接:https://mp.weixin.qq.com/s/kXblwnxsphb00ATDPfsdTA

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: xxx久久| 欧美一区二区三区综合色视频 | 久久国产精品高清一区二区三区 | 嘿嘿午夜 | 国产盗摄美女嘘嘘视频 | 97色| 国产精品最新资源网 | 99视频免费| 欧亚尺码专线欧洲s码wmy | 日韩精品视频福利资源站 | 精品国产人成亚洲区 | 国产福利一区二区三区四区 | 久久电影精品久久99久久 | 99香蕉网 | 亚洲一区二区三区91 | 久久强奷乱码老熟女 | 99久久免费看国产精品 | 欧美福利在线观看 | 9热在线精品视频观看 | 久久99热成人精品国产 | 福利视频导航大全 | 国产91精品区 | 5555国产在线观看精品 | 插美女b| 亚洲上最大成网人站4438 | 香蕉tv国产在线永久播放 | 8x8x拔插 | 日韩经典在线观看 | 国内精品免费一区二区三区 | 免费大秀视频在线播放 | 精品久久免费视频 | 欧美日韩高清完整版在线观看免费 | 欧美精品一区二区三区免费播放 | aaaa黄色片 | 国产特级毛片aaaaaa | 深夜福利免费在线观看 | 亚洲日本中文字幕在线2022 | 亚洲第一色网站 | 日韩不卡一区二区 | 国色天香社区视频免费高清在线观看 | 精品国产日韩一区三区 |