ソースコードの歩き方《IronPython》dict.__str__ 1/3
Previous〈1/3〉Next
Python.use(better, src=”IronPython”) # ソースコードを散策する《記事一覧》
組み込み型 dict:IronPython 篇
dict 型のリテラル表現
dict 型は(文字どおりの)リテラル表現が可能です。つまり、ありのままの構造を表現するだけで、そのインスタンスが得られます。IronPython のソースコードを理解するための布石として、実際に、その動作を確認してみましょう。
>>> {}
{}
括弧 {} を評価すると、dict 型のインスタンス(空辞書)が得られます。そのリテラル表現を見ると、要素を1つも含まないことが分かります。これは、空文字列 "" を評価するときに、文字を1つも含まないのと同様です。
>>> {"A":1}
{'A': 1}
括弧 {} の中には、コロン「:」で区切られた、要素対(キー:値)を記述できます。ここでは、キー要素となる文字列 'A' に、値要素となる整数 1 が対応します。キー/値には、文字列や整数だけでなく、任意のオブジェクトを指定できます。
>>> {"A":1,"B":2}
{'A': 1, 'B': 2}
括弧 {} の中には、カンマ「,」で区切られた、複数の要素対を記述できます。ここでは、要素対 'A': 1 に続けて、要素対 'B': 2 を列挙します。
>>> {"B":2,"A":1}
{'A': 1, 'B': 2}
要素対を記述する順序には、意味がありません(順不同)。入出力を比較すると、要素対の順序が異なるのが分かります。しかし、どちらも同じものです。
>>> {"A":1,"B":2,"C":3}
{'A': 1, 'C': 3, 'B': 2}
3つの要素対を列挙した、dict 型のインスタンスが得られます。入力した順序とは無関係に、出力される順序が決まるのが分かります。
>>> {"A":1,"A":1}
{'A': 1}
重複する要素対を列挙しても、無視されます。2つの要素対は同じなので、1つの要素対だけを持つインスタンスが得られます。
>>> {"A":1,"A":2}
{'A': 2}
キー要素が同じでも、値要素が異なる要素対を列挙すると、後の方を優先(上書き)します。キー要素 'A' が同じなので、後の方の要素対 'A': 2 だけを持つインスタンスが得られます。
>>> {None:0,"":None}
{None: 0, '': None}
必要なら、None を含む要素対を指定できます。
関連記事
- __str__ → ハッシュ表を出力する
組み込み関数:str()
ここで、dict.__str__ のヘルプ情報を確認します。
>>> help(dict.__str__)
Help on wrapper_descriptor:__str__(...)
x.__str__() <==> str(x)
これを見て、dict.__str__ は、組み込み関数 str の動作を規定しているのが分かります。実際に、その動作を確認してみましょう。
>>> ex = {"A":1,"B":2,"C":3}
>>> ex
{'A': 1, 'C': 3, 'B': 2}
>>> str(ex)
"{'A': 1, 'C': 3, 'B': 2}"
dict 型のインスタンス ex を生成して、それをリテラル表現した文字列が得られます。Python Shell では、変数 ex を評価しても、同様の結果が得られます。
>>> ex.__str__()
"{'A': 1, 'C': 3, 'B': 2}"
そして、dict.__str__ は、組み込み関数 str と同じ動作をするのが分かります。