日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
回顧一下Python3.4中的枚舉

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

目前創(chuàng)新互聯(lián)公司已為上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)絡(luò)空間、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、錫林郭勒盟網(wǎng)站維護等服務(wù),公司將堅持客戶導向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

枚舉

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

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

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

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

 
 
 
  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()

枚舉的一個好處是,在調(diào)試日志或異常中,枚舉的呈現(xiàn)方式是有幫助的:

 
 
 
  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

在開發(fā)游戲的“基礎(chǔ)設(shè)施”層時,你想通用地處理各種游戲?qū)ο螅匀辉试S這些對象自定義動作。為了使這個例子更容易解釋,假設(shè)這是一個基于文本的游戲。當你使用一個對象時,大多數(shù)情況下,它只會打印 You are using 。但是使用一把特殊的劍可能需要隨機滾動,否則會失敗。

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

處理這個問題的一個方法是在物品上設(shè)置 use 和 acquire 方法。隨著游戲復(fù)雜性的增加,這些方法會越來越多,使游戲?qū)ο笞兊秒y以編寫。

相反,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)

對于火炬來說,這些通用的實現(xiàn)已經(jīng)足夠了:

 
 
 
  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(xiàn)在,通過 pathlib,Python 有了一種面向?qū)ο蟮姆椒▉聿僮髀窂健?/p>

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

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

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

 
 
 
  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 大約在七年前就發(fā)布了,但是在這個版本中首次出現(xiàn)的一些功能非常酷,而且沒有得到充分利用。如果你還沒使用,那么將他們添加到你的工具箱中。


分享名稱:回顧一下Python3.4中的枚舉
本文網(wǎng)址:http://m.5511xx.com/article/coooccg.html