成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

回顧一下 Python 3.4 中的枚舉

開發 后端
Python 3.4 在 2014 年首次發布,盡管它已經發布了很長時間,但它引入的許多特性都沒有被充分利用,而且相當酷。下面是其中的三個。

Python 3.4 在 2014 年首次發布,盡管它已經發布了很長時間,但它引入的許多特性都沒有被充分利用,而且相當酷。下面是其中的三個。

[[402464]]

枚舉

我最喜歡的邏輯謎題之一是自我描述的 史上最難的邏輯謎題。在其中,它談到了三個“神”,他們被稱為 A、B 和 C,他們的身份是真、假和隨機,按一定順序排列。你可以問他們問題,但他們只用神的語言回答,其中 “da” 和 “ja” 表示 “是” 和 “不是”,但你不知道哪個是哪個。

如果你決定使用 Python 來解決這個問題,你將如何表示神的名字和身份以及神的語言中的詞語?傳統的答案是使用字符串。然而,字符串的拼寫錯誤可能會帶來災難性的后果。

如果在解題的關鍵部分,你用字符串 “jaa” 而不是 “ja” 進行比較,你就會得到一個錯誤的答案。雖然謎題沒有說明風險是什么,但這可能是最好的避免方式。

enum 模塊讓你能夠以一種可調試但安全的方式來定義這些東西:

  1. import enum 
  2. @enum.unique 
  3. class Name(enum.Enum): 
  4.     A = enum.auto() 
  5.     B = enum.auto() 
  6.     C = enum.auto() 
  7.     
  8. @enum.unique 
  9. class Identity(enum.Enum): 
  10.     RANDOM = enum.auto() 
  11.     TRUE = enum.auto() 
  12.     FALSE = enum.auto() 
  13.         
  14. @enum.unique 
  15. class Language(enum.Enum): 
  16.     ja = enum.auto() 
  17.     da = enum.auto() 

枚舉的一個好處是,在調試日志或異常中,枚舉的呈現方式是有幫助的:

  1. name = Name.A 
  2. identity = Identity.RANDOM 
  3. answer = Language.da 
  4. print("I suspect", name, "is", identity, "because they answered", answer) 
  1. I suspect Name.A is Identity.RANDOM because they answered Language.da 

functools.singledispatch

在開發游戲的“基礎設施”層時,你想通用地處理各種游戲對象,但仍然允許這些對象自定義動作。為了使這個例子更容易解釋,假設這是一個基于文本的游戲。當你使用一個對象時,大多數情況下,它只會打印 You are using <x>。但是使用一把特殊的劍可能需要隨機滾動,否則會失敗。

當你獲得一個物品時,它通常會被添加到庫存中。然而,一塊特別重的石頭會砸碎一個隨機物品。如果發生這種情況,庫存中會失去該物體。

處理這個問題的一個方法是在物品上設置 use 和 acquire 方法。隨著游戲復雜性的增加,這些方法會越來越多,使游戲對象變得難以編寫。

相反,functools.singledispatch 允許你以安全和尊重命名空間的方式追溯性地添加方法。

你可以定義沒有行為的類:

  1. class Torch: 
  2.     name="torch" 
  3. class Sword: 
  4.     name="sword" 
  5. class Rock: 
  6.     name="rock" 
  1. import functools 
  2. @functools.singledispatch 
  3. def use(x): 
  4.     print("You use", x.name) 
  5. @functools.singledispatch 
  6. def acquire(x, inventory): 
  7.     inventory.add(x) 

對于火炬來說,這些通用的實現已經足夠了:

  1. import functools 
  2. @functools.singledispatch 
  3. def use(x): 
  4.     print("You use", x.name) 
  5. @functools.singledispatch 
  6. def acquire(x, inventory): 
  7.     inventory.add(x) 
  1. You use torch 
  2. You have ['torch'] 

然而,劍和石頭需要一些專門的功能:

  1. import random 
  2. @use.register(Sword) 
  3. def use_sword(sword): 
  4.     print("You try to use", sword.name) 
  5.     if random.random() < 0.9: 
  6.         print("You succeed") 
  7.     else: 
  8.         print("You fail") 
  9. deploy(sword) 
  1. You try to use sword 
  2. You succeed 
  3. You have ['sword', 'torch'] 
  1. import random 
  2. @acquire.register(Rock) 
  3. def acquire_rock(rock, inventory): 
  4.     to_remove = random.choice(list(inventory)) 
  5.     inventory.remove(to_remove) 
  6.     inventory.add(rock) 
  7. deploy(Rock()) 
  1. You use rock 
  2. You have ['sword', 'rock'] 

巖石可能壓碎了火炬,但你的代碼更容易閱讀。

pathlib

從一開始,Python 中文件路徑的接口就是“智能字符串操作”?,F在,通過 pathlib,Python 有了一種面向對象的方法來操作路徑。

  1. import pathlib 
  1. gitconfig = pathlib.Path.home() / ".gitconfig" 
  2. text = gitconfig.read_text().splitlines() 

誠然,用 / 作為操作符來生成路徑名有點俗氣,但在實踐中卻不錯。像 .read_text() 這樣的方法允許你從小文件中獲取文本,而不需要手動打開和關閉文件句柄。

這使你可以集中精力處理重要的事情:

  1. for line in text: 
  2.     if not line.strip().startswith("name"): 
  3.         continue 
  4.     print(line.split("=")[1]) 
  1. Moshe Zadka 

歡迎來到 2014 年

Python 3.4 大約在七年前就發布了,但是在這個版本中首次出現的一些功能非常酷,而且沒有得到充分利用。如果你還沒使用,那么將他們添加到你的工具箱中。

 

責任編輯:趙寧寧 來源: Linux中國
相關推薦

2012-07-22 15:49:25

Java

2013-07-31 17:47:16

網站制作Web制作Web網站

2022-03-31 09:13:49

Cache緩存高并發

2018-09-03 14:05:08

編程語言Python編程技巧

2021-06-29 19:27:53

JAVA方法接口

2020-12-02 06:02:35

Python

2022-04-11 08:08:52

OpenGauss數據庫接口

2019-06-24 09:57:39

網絡工具調試

2021-11-02 14:54:41

Go結構體標簽

2023-02-04 20:08:24

前端開發

2015-07-28 14:32:41

創業工作和家庭

2020-07-17 08:36:16

JVM性能監控

2023-07-05 08:45:18

Spring事務失效場景

2020-02-10 14:26:10

GitHub代碼倉庫

2021-04-21 14:19:52

javaignalHandle接口

2024-01-10 08:08:25

Python空值校驗開發

2018-05-10 17:39:13

Python 機器學習編程語言

2022-05-18 07:43:09

Exchange交換器JUC

2022-09-05 07:06:59

BeanSpring

2011-10-12 11:07:12

iCloudiOS5蘋果
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久久久久久一区 | 九九久久久| 性一区 | 91免费在线 | 亚洲国产精品久久 | 久久亚洲欧美日韩精品专区 | 日韩一区二区三区四区五区六区 | 成人精品一区二区三区中文字幕 | 蜜臀久久99精品久久久久久宅男 | 亚洲欧美中文字幕在线观看 | 色综合99| 国产有码| 国产一区二区三区在线 | 91av免费看 | 成人久久18免费 | 亚洲国产成人精品久久 | 一级片成人 | 成人深夜福利 | 婷婷色国产偷v国产偷v小说 | 久久精品一级 | 狠狠的干| 欧美一区二区免费视频 | 欧美乱做爰xxxⅹ久久久 | 国产高清在线精品一区二区三区 | 精品国产一区探花在线观看 | 一区二区三区高清在线观看 | 黄色免费在线观看网址 | 国产在线精品一区二区三区 | 精品国产免费一区二区三区五区 | 免费看日韩视频 | 国产精品福利在线观看 | 久草视频观看 | 精品福利一区 | 毛片一区二区三区 | 亚洲天堂av在线 | 亚洲国产成人av好男人在线观看 | 免费午夜剧场 | 亚洲欧美视频 | 久久久久久久97 | 国产成人精品999在线观看 | 碰碰视频 |