Python で名前付きタプル
- Python の名前付きタプルとは
- Python での単純なタプルと名前付きタプルの違い
- Python で単純なタプルの代わりに名前付きタプルを使用する場合
- Python で名前付きタプルを使用する方法
この記事では、名前付きタプル、その使用時期と使用方法、および Python での通常のタプルと名前付きタプルの違いについて説明します。
Python の名前付きタプルとは
名前付きタプルは、タプルのすべての機能を備えた特別な種類のタプルです。名前付きタプルは Python 2.6 で導入されました。辞書と同じように、名前付きタプルにはキーと値のペアが含まれています。
値には、そのキーとインデックスを使用してアクセスできます。これは、C 言語の構造体に似ています。
Python での単純なタプルと名前付きタプルの違い
Named Tuple
は、単純なタプルのオブジェクト表現です。これは、ファクトリ関数を使用してプログラムで作成された名前付き変数を持つ単純なタプルのサブクラスです。
名前付きタプルの参照変数でドット演算子を使用し、参照変数でアイテムのインデックスを使用することにより、名前付きタプルのアイテムにアクセスできます。単純なタプルでは、アイテムのインデックスと参照変数のみを使用してアクセスできます。
Python で単純なタプルの代わりに名前付きタプルを使用する場合
コードをクリーンでわかりやすく、より pythonic に見せたい場合は、単純なタプルの代わりに名前付きタプルを使用します。
たとえば、辞書の場合、person.age
は person.age
よりもきれいに見えます。また、単純なタプルの場合、person.age
は person[1]
よりもきれいに見えます。
Python で名前付きタプルを使用する方法
名前付きタプルを生成するには、最初に、コレクションモジュール内のファクトリ関数である namedtuple()
をインポートします。ファクトリ関数は、さまざまなプロトタイプのクラスを製造するために使用される関数です。
このファクトリ関数を使用して、クラスの名前と属性を指定します。したがって、一般的な構文は次のとおりです。
Class_Name = namedtuple('Class_Name', ['field_1', 'field_2', ....., 'field_n'])
次に、クラスをインスタンス化できます。クラスをインスタンス化すると、オブジェクトが作成され、対応するフィールドに値が割り当てられます。
したがって、一般的な構文は次のとおりです。
Ref_Variable_Name = Class_Name('Value_1', 'Value_2', ....., 'Value_n')
ドット表記を使用して、特定のフィールドの値にアクセスできます。したがって、一般的な構文は次のとおりです。
Ref_Variable_Name.field_name
次の完全なサンプルコードでは、クラスの名前は Person
であり、その属性は name
と age
です。次に、クラス Person
のインスタンス p1
を作成します。
現在、このインスタンス p1
は名前付きタプルです。オブジェクト表記を使用し、コード内の参照変数を使用したインデックスによってクラス変数にアクセスしました。
ただし、オブジェクト表記はより明確で理解しやすいものであり、これが名前付きタプルの背後にある動機です。
サンプルコード:
# python 3.x
from collections import namedtuple
Person = namedtuple("Person", ["name", "age"])
p1 = Person("Jhon", "20")
print("Accessing values using index:")
print("Person Name:", p1[0])
print("Person Age:", p1[1])
print("Accessing Values using key:")
print("Person Name:", p1.name)
print("Person Age:", p1.age)
出力:
# python 3.x
Accessing values using index:
Person Name: Jhon
Person Age: 20
Accessing Values using key:
Person Name: Jhon
Person Age: 20
I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.
LinkedIn