站長資訊網
最全最豐富的資訊網站

Python數據結構:一個被低估的Namedtuple(二)

python視頻教程欄目繼續(xù)帶大家了解Python數據結構的Namedtuple。

Python數據結構:一個被低估的Namedtuple(二)

上篇Python數據結構:一個被低估的Namedtuple(一)講了namedtuple的一些基本用法,本篇繼續(xù)。

namedtuples和數據類(Data Class)之間有什么區(qū)別?

功能

在Python 3.7之前,可使用以下任一方法創(chuàng)建一個簡單的數據容器:

  • namedtuple
  • 常規(guī)類
  • 第三方庫,attrs

如果您想使用常規(guī)類,那意味著您將必須實現幾個方法。例如,常規(guī)類將需要一種__init__方法來在類實例化期間設置屬性。如果您希望該類是可哈希的,則意味著自己實現一個__hash__方法。為了比較不同的對象,還需要__eq__實現一個方法。最后,為了簡化調試,您需要一種__repr__方法。

讓我們使用常規(guī)類來實現下我們的顏色用例。

class Color:     """A regular class that represents a color."""      def __init__(self, r, g, b, alpha=0.0):         self.r = r         self.g = g         self.b = b         self.alpha = alpha    def __hash__(self):         return hash((self.r, self.g, self.b, self.alpha))    def __repr__(self):         return "{0}({1}, {2}, {3}, {4})".format(             self.__class__.__name__, self.r, self.g, self.b, self.alpha         )    def __eq__(self, other):         if not isinstance(other, Color):            return False         return (             self.r == other.r            and self.g == other.g            and self.b == other.b            and self.alpha == other.alpha         )復制代碼

如上,你需要實現好多方法。您只需要一個容器來為您保存數據,而不必擔心分散注意力的細節(jié)。同樣,人們偏愛實現類的一個關鍵區(qū)別是常規(guī)類是可變的。

實際上,引入數據類(Data Class)的PEP將它們稱為“具有默認值的可變namedtuple”(譯者注:Data Class python 3.7引入,參考:docs.python.org/zh-cn/3/lib…

現在,讓我們看看如何用數據類來實現。

from dataclasses import dataclass ...@dataclassclass Color:     """A regular class that represents a color."""     r: float     g: float     b: float     alpha: float復制代碼

哇!就是這么簡單。由于沒有__init__,您只需在docstring后面定義屬性即可。此外,必須使用類型提示對其進行注釋。

除了可變之外,數據類還可以開箱即用提供可選字段。假設我們的Color類不需要alpha字段。然后我們可以設置為可選。

from dataclasses import dataclassfrom typing import Optional ...@dataclassclass Color:     """A regular class that represents a color."""     r: float     g: float     b: float     alpha: Optional[float]復制代碼

我們可以像這樣實例化它:

>>> blue = Color(r=0, g=0, b=255)復制代碼

由于它們是可變的,因此我們可以更改所需的任何字段。我們可以像這樣實例化它:

>>> blue = Color(r=0, g=0, b=255) >>> blue.r = 1 >>> # 可以設置

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
午夜在线视频91精品| 91精品久久久久久久久网影视| 国产精品va一级二级三级| 国产乱人伦app精品久久| 国产在线精品一区二区三区直播| 人妖在线精品一区二区三区| 国产亚洲午夜高清国产拍精品| 1000部精品久久久久久久久| 97久久国产露脸精品国产| 精品久久久无码中文字幕边打电话 | 国产精品天干天干| 国产成人精品优优av| 视频精品一区二区三区| 亚洲精品视频在线观看免费| 亚洲欧洲精品成人久久曰影片| 2018国产精华国产精品| 久久精品国产99精品国产亚洲性色 | 久久精品99视频| 亚洲精品天堂成人片?V在线播放| 尤物在线观看精品国产福利片| 精品久久久无码21p发布| 国产精品嫩草影院一二三区| 国产精品jizz在线观看免费| 亚洲AV无码成人精品区在线观看 | 七次郎在线视频精品视频| 麻豆亚洲AV成人无码久久精品| 精品亚洲AV无码一区二区| 国产亚洲精品自在久久| 日韩精品一区二区三区在线观看| 国产大陆亚洲精品国产| 国产精品无码DVD在线观看| 国产乱人伦app精品久久| 国产精品成人va在线观看入口| 91精品啪在线观看国产电影| 国产精品国语对白露脸在线播放| 国产99久久久国产精品小说| 精品人妻一区二区三区浪潮在线| 亚洲高清国产拍精品青青草原| 日韩精品中文字幕视频一区| 国产精品久久久久蜜芽| 91久久精品国产成人久久|