91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python 3.4中枚舉的示例分析

發布時間:2021-06-13 08:34:25 來源:億速云 閱讀:259 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關Python 3.4中枚舉的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

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

Python 3.4中枚舉的示例分析

枚舉

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

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

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

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

import enum @enum.unique class Name(enum.Enum):     A = enum.auto()     B = enum.auto()     C = enum.auto()     @enum.unique class Identity(enum.Enum):     RANDOM = enum.auto()     TRUE = enum.auto()     FALSE = enum.auto()         @enum.unique class Language(enum.Enum):     ja = enum.auto()     da = enum.auto()

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

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

functools.singledispatch

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

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

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

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

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

class Torch:     name="torch" class Sword:     name="sword" class Rock:     name="rock"
import functools @functools.singledispatch def use(x):     print("You use", x.name) @functools.singledispatch def acquire(x, inventory):     inventory.add(x)

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

import functools @functools.singledispatch def use(x):     print("You use", x.name) @functools.singledispatch def acquire(x, inventory):     inventory.add(x)
You use torch You have ['torch']

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

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

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

pathlib

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

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

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

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

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

感謝各位的閱讀!關于“Python 3.4中枚舉的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

如皋市| 遵义县| 嘉峪关市| 仪征市| 怀柔区| 张家港市| 团风县| 黑山县| 白玉县| 甘泉县| 神木县| 石首市| 武山县| 鄢陵县| 阳山县| 安远县| 济南市| 贵阳市| 得荣县| 贵港市| 江北区| 龙州县| 凭祥市| 石阡县| 遂昌县| 富裕县| 米泉市| 遵义县| 尚志市| 丹东市| 大渡口区| 扬州市| 赤壁市| 汾西县| 玛多县| 榆中县| 宜黄县| 怀来县| 监利县| 东丽区| 宁阳县|