欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python具名元組(namedtuple)的具體使用

 更新時間:2023年03月21日 11:11:35   作者:alwaysrun  
本文主要介紹了python具名元組(namedtuple)的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

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

具名元組

namedtuple對象的定義:

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

  • typename:元組名稱
  • field_names:是字段序列(如,[‘x’, ‘y’]);
  • rename:為true時,字段名無效時(如,重名或使用關(guān)鍵字)會被自動替換為位置名(如,_1);
  • defaults:字段的默認(rèn)值,若為iterable對象,則依次對應(yīng)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)構(gòu)造具名元組:

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

print("r:", c.r)

元組操作

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

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

把字典轉(zhuǎn)換為具名元組:

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

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

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

具名元組轉(zhuǎn)換為元組:

c = Color(r=50, g=0, b=0, alpha=0.5)
t = tuple(c)

屬性

  • 屬性_fields包含所有字段的元組:如('r', 'g', 'b', 'alpha');
  • 屬性__annotations__包含字段與對應(yīng)類型的字典:如{'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是一種非常通用的數(shù)據(jù)結(jié)構(gòu),很容易被濫用,同時相對namedtuple,有以下問題:

  • 字典是不可散列,因此無法將其存儲在set或其他字典中;
  • 字典是可變的,可以根據(jù)需要添加任意數(shù)量的新鍵;

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

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

數(shù)據(jù)類

數(shù)據(jù)類詳情可參見《數(shù)據(jù)類(dataclass)簡介》。

dataclass修飾

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

  • 可方便地添加doc;
  • 可定義可選字段;
from dataclasses import dataclass

# frozen設(shè)為true后,字段內(nèi)容將不允許修改(與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) ? ?

到此這篇關(guān)于python具名元組(namedtuple)的具體使用的文章就介紹到這了,更多相關(guān)python具名元組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論