亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長(zhǎng)資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    Python數(shù)據(jù)結(jié)構(gòu):一個(gè)被低估的Namedtuple(二)

    python視頻教程欄目繼續(xù)帶大家了解Python數(shù)據(jù)結(jié)構(gòu)的Namedtuple。

    Python數(shù)據(jù)結(jié)構(gòu):一個(gè)被低估的Namedtuple(二)

    上篇Python數(shù)據(jù)結(jié)構(gòu):一個(gè)被低估的Namedtuple(一)講了namedtuple的一些基本用法,本篇繼續(xù)。

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

    功能

    在Python 3.7之前,可使用以下任一方法創(chuàng)建一個(gè)簡(jiǎn)單的數(shù)據(jù)容器:

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

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

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

    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         )復(fù)制代碼

    如上,你需要實(shí)現(xiàn)好多方法。您只需要一個(gè)容器來為您保存數(shù)據(jù),而不必?fù)?dān)心分散注意力的細(xì)節(jié)。同樣,人們偏愛實(shí)現(xiàn)類的一個(gè)關(guān)鍵區(qū)別是常規(guī)類是可變的。

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

    現(xiàn)在,讓我們看看如何用數(shù)據(jù)類來實(shí)現(xiàn)。

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

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

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

    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]復(fù)制代碼

    我們可以像這樣實(shí)例化它:

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

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

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

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)