中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

python具名元組怎么使用

發布時間:2023-05-04 09:38:02 來源:億速云 閱讀:80 作者:zzz 欄目:編程語言

這篇文章主要介紹“python具名元組怎么使用”,在日常操作中,相信很多人在python具名元組怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”python具名元組怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

collections.namedtuple用于構造帶字段名的元組。對應類型為typing.NamedTuple(可用作超類)。

具名元組

namedtuple對象的定義:

collections.namedtuple(typename, field_names, verbose=False, rename=False, defaults=None, module=None):

  • typename:元組名稱

  • field_names:是字段序列(如,[‘x’, ‘y’]);

  • rename:為true時,字段名無效時(如,重名或使用關鍵字)會被自動替換為位置名(如,_1);

  • defaults:字段的默認值,若為iterable對象,則依次對應field_names中字段的缺省值;

from collections import namedtuple

Color = namedtuple("Color", "r g b alpha")

def convert_to_color(desc: str, alpha: float = 0.0):
    if desc == "green":
        return Color(r=50, g=205, b=50, alpha=alpha)
    elif desc == "blue":
        return Color(r=50, g=0, b=255, alpha=alpha)
    else:
        return Color(r=50, g=0, b=0, alpha=alpha)

從可迭代對象(Iterable)構造具名元組:

c = Color._make([10, 20, 30, 0.1])
nc = Color._make((10, 20, 30, 0.1))

print("r:", c.r)

元組操作

具名元組修改:不能直接修改里面的值,可通過_replace構造一個新的:

c = {"r": 50, "g": 205, "b": 50, "alpha": 0.5}
nc = c._replace(r=100)

把字典轉換為具名元組:

c = {"r": 50, "g": 205, "b": 50, "alpha": 0.5}
nc = Color(**c)

具名元組轉換為字典(通過_asdict方法):

c = Color(r=50, g=0, b=0, alpha=0.5)
d = c._asdict()

具名元組轉換為元組:

c = Color(r=50, g=0, b=0, alpha=0.5)
t = tuple(c)
屬性
  • 屬性_fields包含所有字段的元組:如('r', 'g', 'b', 'alpha');

  • 屬性__annotations__包含字段與對應類型的字典:如{'r': <class 'float'>, 'g': <class 'float'>, 'b': <class 'float'>, 'alpha': <class 'float'>};

  • 屬性_field_defaults保證有初始值的字段與初始值的字典:如{'alpha': 0.0};

排序

具名元組排序:通過operator庫中的attrgetter可指定排序字段:

from operator import attrgetter

colors = [
    Color(r=50, g=205, b=50, alpha=0.1),
    Color(r=50, g=205, b=50, alpha=0.5),
    Color(r=50, g=0, b=0, alpha=0.3)
]
out = sorted(colors, key=attrgetter("alpha"))
print(out)
與字典比較

字典dict是一種非常通用的數據結構,很容易被濫用,同時相對namedtuple,有以下問題:

  • 字典是不可散列,因此無法將其存儲在set或其他字典中;

  • 字典是可變的,可以根據需要添加任意數量的新鍵;

與dict類似,在namedtuple中可以將值分配給單個變量并根據需要使用。但:

namedtuple是不可變的,不會意外添加新的值(鍵);

數據類

dataclass修飾

python3.7中引入了數據類(Data Class),可看做是“具有默認值的可變namedtuple”:

  • 可方便地添加doc;

  • 可定義可選字段;

from dataclasses import dataclass

# frozen設為true后,字段內容將不允許修改(與namedtuple完全類似)
# 否則可修改字段;并可任意添加字段(如,c.n=1);
@dataclass(frozen=True)
class DColor:
    """A regular class that represents a color."""
    r: float
    g: float
    b: float
    alpha: float = 0.0

# c = DColor(r=10, g=20, b=30)
c = DColor(10, 20, 30)
繼承NamedTuple

通過繼承NamedTuple也可方便定義(同時可定義字段的初始值,有初始值的字段必須在無初始字段后面):

from typing import NamedTuple

class NColor(NamedTuple):
    """A namedtuple that represents a color."""
    r: float
    g: float
    b: float
    alpha: float = 0.0

nc = NColor(100, 110, 120)

到此,關于“python具名元組怎么使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

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

AI

开化县| 水富县| 怀仁县| 西充县| 岳阳县| 开封县| 莱阳市| 台安县| 巧家县| 赞皇县| 博野县| 雷山县| 扬中市| 大渡口区| 潞城市| 渑池县| 康乐县| 临西县| 博兴县| 邛崃市| 兴文县| 信阳市| 苍溪县| 海南省| 巴马| 达日县| 酉阳| 镇原县| 沁阳市| 林甸县| 芒康县| 泰安市| 乐亭县| 怀化市| 清苑县| 丁青县| 康保县| 乡城县| 崇文区| 利川市| 建水县|