不変のオブジェクトのシーケンスは Tuple
と呼ばれる。
Namedtuple` は、タプル内の要素に名前を付けることができます。
そのため、ユーザはインデックスや指定した名前によって要素にアクセスすることができます。
したがって、コードの可読性を高めることができます。
構文は以下の様な感じです。
collections.namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)
typename: ネームテュプルのオブジェクトに割り当てられた名前を表します。
field-names。
名前付きタプルにフィールド名を定義するために使用される。
rename: rename変数の値をTrueに設定することで、ユーザは無効なフィールドの名前を対応するインデックス名に変更することができる。
defaults: オプションであるパラメータにデフォルト値を定義することができる。
モジュール モジュールが定義されていれば、指定されたタプルの __module__
属性に特定の値が設定される。
例えば、以下の様になります。
from collections import namedtuple
Information = namedtuple( 'Information' , [ 'city' , 'state' , 'pin_code' ])
# below are also valid ways to namedtuple # Employee = namedtuple('Employee', 'name age role') # Employee = namedtuple('Employee', 'name,age,role') info1 = Information( 'Pune' , 'Maharashtra' , 411027 )
info2 = Information( 'Satara' , 'Maharashtra' , 411587 )
for x in [info1, info2]:
print (x)
print ( ' )
print ( "Accessing the attributes via index values...." )
# accessing via index value for x in [info1, info2]:
print (x)
print ( "Accessing the attributes via field name...." )
# accessing via name of the field for x in [info1, info2]:
print (x.city, 'is in' ,x.state, 'with' , x.pin_code)
|
結果は、以下の通りです。
Information(city='Pune', state='Maharashtra', pin_code=411027)
Information(city='Satara', state='Maharashtra', pin_code=411587)
Accessing the attributes via index values....
Information(city='Pune', state='Maharashtra', pin_code=411027)
Information(city='Satara', state='Maharashtra', pin_code=411587)
Accessing the attributes via field name....
Pune is in Maharashtra with 411027
Satara is in Maharashtra with 411587
Python 名前付きタプルの機能性
-
getattr() 関数
を使って属性にアクセスできる - Python Namedtuple with invalid keys`.
-
変数の名前を変更する
. -
Namedtuple モジュール
を作成する -
_make(iterable) function
. -
_asdict() function
(アディクト)関数 -
_replace(**kwargs) 関数
. -
名前付きタプル属性
について -
"**" (ダブルスター) 演算子
.
1. getattr()関数を使った属性へのアクセス
getattr()` 関数は namedtuple の属性にアクセスするために使われます。
from collections import namedtuple
Information = namedtuple( 'Information' , [ 'city' , 'state' , 'pin_code' ])
info1 = Information( 'Pune' , 'Maharashtra' , 411027 )
info2 = Information( 'Satara' , 'Maharashtra' , 411587 )
print ( getattr (info1, 'city' ))
|
結果を出力すると、以下の様になります。
Pune
2. Python Namedtuple with invalid keys (無効なキーを持つ名前付きタプル)
ユーザーがフィールドの値やキーとして無効な名前を使用した場合、ValueError
が生成されます。
from collections import namedtuple
Information = namedtuple( 'Information' , [ 'city' , 'state' , 'pin_code' ])
try :
Information = namedtuple( 'Information' , [ 'city' , 'state' , 'if ' ])
except ValueError as error:
print (error)
|
結果は、以下の通りです。
Type names and field names must be valid identifiers: 'if '
3. rename 変数
ユーザーが無効なキーを使用した場合、rename変数をTrueに設定することができる。
これにより、キーはそのインデックス値に置き換えられる。
from collections import namedtuple
Information = namedtuple( 'Information' , 'if' , rename = True )
try :
info1 = Information( 'Pune' )
for x in [info1]:
print (x)
except ValueError as error:
print (error)
|
結果を出力すると、以下の様になります。
Information(_0='Pune')
4. Namedtuple module
Fake tags
Output:
Fake code
—Fake code
5. _make(iterable) function
Fake tag
Output:
Fake code
—FALSE CODE
6. 6.asdict()関数
関数 _asdict()
は Namedtuple から OrderedDict のインスタンスを生成するのを支援します。
from collections import namedtuple
Information = namedtuple( 'Information' , 'city' , rename = True , module = 'Simple1' )
print (Information.__module__)
|
結果は以下の通りです。
出力: “`
Simple1
---
### 7. 7. _replace(**kwargs) function
namedtupleはimmutableなので、値を変更することはできません。この関数では、対応するキーを新しい値のセットで置き換えることで、新しいインスタンスを返します。
<div class="wp-block-syntaxhighlighter-code"><div><div class="syntaxhighlighter nogutter python" id="highlighter_374944"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="python keyword">from</code> <code class="python plain">collections </code><code class="python keyword">import</code> <code class="python plain">namedtuple</code></div><div class="line number2 index1 alt1"> </div><div class="line number3 index2 alt2"><code class="python plain">Information </code><code class="python keyword">=</code> <code class="python plain">namedtuple(</code><code class="python string">'Information'</code><code class="python plain">, [</code><code class="python string">'city'</code><code class="python plain">, </code><code class="python string">'state'</code><code class="python plain">, </code><code class="python string">'pin_code'</code><code class="python plain">])</code></div><div class="line number4 index3 alt1"> </div><div class="line number5 index4 alt2"><code class="python plain">x </code><code class="python keyword">=</code> <code class="python plain">(</code><code class="python string">'Pune'</code><code class="python plain">, </code><code class="python string">'Maharashtra'</code><code class="python plain">, </code><code class="python value">411027</code><code class="python plain">)</code></div><div class="line number6 index5 alt1"><code class="python plain">info1 </code><code class="python keyword">=</code> <code class="python plain">Information._make(x)</code></div><div class="line number7 index6 alt2"><code class="python functions">print</code><code class="python plain">(info1)</code></div></div></td></tr></tbody></table></div></div></div>
出力します。
Information(city=’Pune’, state=’Maharashtra’, pin_code=411027)
---
### 8. 名前付きタプル属性
* _fields: フィールドに関する情報を提供します。
_fields: フィールドに関する情報を提供します。ユーザが設定したフィールドのデフォルト値に関する情報を提供します。
例1: 例1: _fields 属性
<div class="wp-block-syntaxhighlighter-code"><div><div class="syntaxhighlighter nogutter python" id="highlighter_927543"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="python keyword">from</code> <code class="python plain">collections </code><code class="python keyword">import</code> <code class="python plain">namedtuple</code></div><div class="line number2 index1 alt1"> </div><div class="line number3 index2 alt2"><code class="python plain">Information </code><code class="python keyword">=</code> <code class="python plain">namedtuple(</code><code class="python string">'Information'</code><code class="python plain">, [</code><code class="python string">'city'</code><code class="python plain">, </code><code class="python string">'state'</code><code class="python plain">, </code><code class="python string">'pin_code'</code><code class="python plain">])</code></div><div class="line number4 index3 alt1"> </div><div class="line number5 index4 alt2"><code class="python plain">x </code><code class="python keyword">=</code> <code class="python plain">(</code><code class="python string">'Pune'</code><code class="python plain">, </code><code class="python string">'Maharashtra'</code><code class="python plain">, </code><code class="python value">411027</code><code class="python plain">)</code></div><div class="line number6 index5 alt1"><code class="python plain">info1 </code><code class="python keyword">=</code> <code class="python plain">Information._make(x)</code></div><div class="line number7 index6 alt2"> </div><div class="line number8 index7 alt1"><code class="python plain">ordered_output </code><code class="python keyword">=</code> <code class="python plain">info1._asdict()</code></div><div class="line number9 index8 alt2"><code class="python functions">print</code><code class="python plain">(ordered_output)</code></div></div></td></tr></tbody></table></div></div></div>
出力されます。
{‘city’: ‘Pune’, ‘state’: ‘Maharashtra’, ‘pin_code’: 411027}
例2: _fields の defaults 属性。
<div class="wp-block-syntaxhighlighter-code"><div><div class="syntaxhighlighter nogutter python" id="highlighter_337969"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="python keyword">from</code> <code class="python plain">collections </code><code class="python keyword">import</code> <code class="python plain">namedtuple</code></div><div class="line number2 index1 alt1"> </div><div class="line number3 index2 alt2"><code class="python plain">Information </code><code class="python keyword">=</code> <code class="python plain">namedtuple(</code><code class="python string">'Information'</code><code class="python plain">, [</code><code class="python string">'city'</code><code class="python plain">, </code><code class="python string">'state'</code><code class="python plain">, </code><code class="python string">'pin_code'</code><code class="python plain">])</code></div><div class="line number4 index3 alt1"> </div><div class="line number5 index4 alt2"><code class="python plain">x </code><code class="python keyword">=</code> <code class="python plain">(</code><code class="python string">'Pune'</code><code class="python plain">, </code><code class="python string">'Maharashtra'</code><code class="python plain">, </code><code class="python value">411027</code><code class="python plain">)</code></div><div class="line number6 index5 alt1"><code class="python plain">info1 </code><code class="python keyword">=</code> <code class="python plain">Information._make(x)</code></div><div class="line number7 index6 alt2"> </div><div class="line number8 index7 alt1"><code class="python plain">info2 </code><code class="python keyword">=</code> <code class="python plain">info1._replace(city</code><code class="python keyword">=</code><code class="python string">'Satara'</code><code class="python plain">, state</code><code class="python keyword">=</code><code class="python string">'Maharashtra'</code><code class="python plain">, pin_code</code><code class="python keyword">=</code><code class="python value">411031</code><code class="python plain">)</code></div><div class="line number9 index8 alt2"><code class="python functions">print</code><code class="python plain">(info2)</code></div></div></td></tr></tbody></table></div></div></div>
出力:'
Information(city=’Satara’, state=’Maharashtra’, pin_code=411031)
---
### 9. 9. " ****" (ダブルスター)演算子
辞書から名前付きタプルに変換するための演算子です。
<div class="wp-block-syntaxhighlighter-code"><div><div class="syntaxhighlighter nogutter python" id="highlighter_410688"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="python keyword">from</code> <code class="python plain">collections </code><code class="python keyword">import</code> <code class="python plain">namedtuple</code></div><div class="line number2 index1 alt1"> </div><div class="line number3 index2 alt2"><code class="python plain">Information </code><code class="python keyword">=</code> <code class="python plain">namedtuple(</code><code class="python string">'Information'</code><code class="python plain">, [</code><code class="python string">'city'</code><code class="python plain">, </code><code class="python string">'state'</code><code class="python plain">, </code><code class="python string">'pin_code'</code><code class="python plain">])</code></div><div class="line number4 index3 alt1"> </div><div class="line number5 index4 alt2"><code class="python functions">print</code><code class="python plain">(</code><code class="python string">"Fields: "</code><code class="python plain">)</code></div><div class="line number6 index5 alt1"><code class="python functions">print</code> <code class="python plain">(Information._fields)</code></div></div></td></tr></tbody></table></div></div></div>
結果を出力すると、以下の様になります。
出力: ```
Fields:
('city', 'state', 'pin_code')
まとめ
以上、PythonのNamedtupleオブジェクトが提供するコレクション機能を理解しました。