自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python 居然開始抄作業(yè)了,這次抄的是Rust

開發(fā) 后端
眾所周知,Rust有兩樣鎮(zhèn)山之寶,一是安全的內(nèi)存模型,二是模式匹配。在內(nèi)存管理上,Python使用了傳統(tǒng)的垃圾回收的內(nèi)存模型,和Rust沒有多少可比性。隨著Python3.10的發(fā)布,模式匹配被引入到Python中,而且?guī)缀跏峭耆瞻崃薘ust的概念。

[[431840]]

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

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

眾所周知,Rust有兩樣鎮(zhèn)山之寶,一是安全的內(nèi)存模型,二是模式匹配。在內(nèi)存管理上,Python使用了傳統(tǒng)的垃圾回收的內(nèi)存模型,和Rust沒有多少可比性。隨著Python3.10的發(fā)布,模式匹配被引入到Python中,而且?guī)缀跏峭耆瞻崃薘ust的概念。Rust支持模式匹配中的變量綁定、結(jié)構(gòu)體/元組解構(gòu)、守衛(wèi)條件判斷、數(shù)值范圍匹配等特性,Python照單全收,連下劃線 _ 匹配任意情形也原封不動地繼承了過來。

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

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

  1. >>> a = 3 
  2. >>> match(a): 
  3.     case 1: 
  4.         print("a == 1"
  5.     case 2: 
  6.         print("a == 2"
  7.     case _:        # default 
  8.         print("other"
  9.  
  10. other 

case語句中,支持或操作:

  1. >>> import datetime 
  2. >>> n = datetime.datetime.now() 
  3. >>> match(n.weekday()): 
  4.     case 0|1|2|3|4: print("工作日"
  5.     case 5|6: print("周末"
  6.  
  7. 工作日 

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

  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.  
  8. a[0]==0, a[1]==1 

對列表:

  1. >>> cmd = "ls test" 
  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.  
  7. 顯示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.  
  8. 他是一名程序員,名字叫xxx, 40歲了 

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

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

也可以用于多個類:

  1. >>> class Programmer: 
  2.     def __init__(self, lang): 
  3.         self.lang = lang 
  4.  
  5.  
  6. >>> class Teacher: 
  7.     def __init__(self, subject): 
  8.         self.subject = subject 
  9.  
  10. >>> a = Programmer("Python"
  11. >>> match(a): 
  12.     case Programmer(lang="Python"): print("咱們都是Pyhon程序員!"
  13.     case Programmer(): print("原來你也是一名程序員!"
  14.     case Teacher(): print("向人民教師致敬!"
  15.  
  16. 咱們都是Pyhon程序員! 

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

  1. >>> class Point(): 
  2.     def __init__(self,x,y): 
  3.         self.x = x 
  4.         self.y = y 
  5.  
  6.  
  7. >>> a = Point(2,2) 
  8. >>> match(a): 
  9.     case Point(x=x, y=y) if x==y: print("這個點在斜率為1的直線上"
  10.     case Point(x=x, y=y) if x==-y: print("這個點在斜率為-1的直線上"
  11.  
  12. 這個點在斜率為1的直線上 

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

  1. >>> a = 5 
  2. >>> match(a): 
  3.     case x if 1 <= x < 10: print("數(shù)字在1和10之間"
  4.     case x if 10 <= x < 20: print("數(shù)字在10和20之間"
  5.  
  6. 數(shù)字在1和10之間 

 

責任編輯:武曉燕 來源: Python作業(yè)輔導員
相關(guān)推薦

2024-11-21 15:29:34

2012-01-13 16:00:05

愛國者馮軍蘋果

2013-01-15 09:58:11

谷歌移動應用蘋果

2020-09-24 12:32:41

微軟開發(fā) AI

2021-10-21 06:39:41

限流熔斷系統(tǒng)

2025-02-26 07:40:25

運營分析體系運營策略

2014-11-24 13:30:47

蘋果設計

2011-04-15 09:14:03

抄襲巨頭IT

2020-12-29 09:23:40

分庫分表訂單

2011-09-15 12:13:42

喬布斯蘋果

2022-04-19 16:07:26

iOS蘋果安卓

2014-07-16 09:15:44

Android LiOS 8WP8.1

2015-11-02 10:18:54

日志RedstoneWindows 10

2020-09-15 16:01:28

無線數(shù)傳模塊

2024-05-21 08:40:21

分庫分表源碼

2015-08-05 10:39:54

知乎整理騰訊

2023-11-01 11:34:40

用戶畫像企業(yè)

2021-06-09 11:28:04

用戶畫像標簽

2022-12-28 11:44:19

用戶畫像互聯(lián)網(wǎng)用戶信息

2020-11-30 09:15:00

Windows 功能系統(tǒng)
點贊
收藏

51CTO技術(shù)棧公眾號