Entry

Python では定数の代わりにタプルを使えといっている人

2010年03月22日

この前,Python の定数の話を書いたんですけれど(参照:qune: 定数宣言はバグの自動検出のためにあるんでねいのかな),案の定,「タプル使えよ」という"つぶやき"をいただいて,なんだかものすごくトホホ……。先の引用元のブログ主さんも,「タプルは定数の代わりにはなりません」と言ってるんですけどね。

タプルを C/C++ 的に表現するなら,「値を変更できない無名の構造体」とか言えるんだと思います。確かに値を変更できないという意味で const 性はある。よくあるけど,こゆ例ですね。

>>> a = ("foo", 10)
>>> a[0] = "bar"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

つまり,タプルは左辺値にならない,という意味で const 性がある,と。オブジェクト指向的に言うなら immutable なオブジェクトだといってもいい。

しかしこゆオブジェクトも,名前をつけるには変数に入れる必要があるわけで,

>>> a = ("foo", 10)
>>> b = ("bar", 20)
>>> c = a
>>> a = b
>>> b = c
>>> a
('bar', 20)
>>> b
('foo', 10)

その変数の名前は変わる。a やら b やらはただの変数なので,別に不思議なことじゃありません。また,("foo", 10) に値を入れるということも,当然できません。("foo", 10) というオブジェクトは,その値として確たる名前(定数としての名前)もないままメモリ上にある,と,ただそれだけの話です。この話を読んでいて,どうしてタプルの話が出てくるのか,あたしゃその時点でよく分からなかったんですけど,単に「値を変更できない」という点に引きずられただけなのかしらん。

あたしゃ別に,Python が定数や変数の const 性をあえて無視していることについては,とりたてて興味がなかったりします。興味があるのは,先のエントリでも書いた通り,そうした仕組みの中で(バグ修正や保守も含めた)効率的な開発工程を実現できるのか,という点。これに尽きます。

シンプルさをウリにした処理系は,他で対価を払っていたりもする。「それでもいい」という設計思想でやってるなら,それはそれでいいんでねいの?と思う。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN