You are here: Home > Dive Into Python > 内省の力 > type, str, dir や他の組み込み関数を使う | << >> | ||||
Dive Into PythonPython from novice to pro |
Python は飛び抜けて有用な組み込み関数を少数揃えています. 他の全ての関数はモジュールに分配されています. これは他のスクリプト言語 (Visual Basic...ゲフンゲフン) のように言語の核となる部分が太り過ぎるのを防ぐための, 実に意図的な設計上の判断です.
type 関数は任意のオブジェクトのデータ型を返します. 取り得る型は types モジュールに列挙されています. これは数種類の型のデータを扱う補助関数で役に立ちます.
str 関数はデータを文字列に変換します. 全てのデータ型は文字列に変換することができます.
>>> str(1) '1' >>> horsemen = ['war', 'pestilence', 'famine'] >>> horsemen ['war', 'pestilence', 'famine'] >>> horsemen.append('Powerbuilder') >>> str(horsemen) "['war', 'pestilence', 'famine', 'Powerbuilder']" >>> str(odbchelper) "<module 'odbchelper' from 'c:\\docbook\\dip\\py\\odbchelper.py'>" >>> str(None) 'None'
info 関数の肝は強力な dir 関数です. dir は, モジュール, 関数, 文字列, リスト, 辞書...といった任意のオブジェクトの属性とメソッドのリストを返します.
>>> li = [] >>> dir(li) ['append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] >>> d = {} >>> dir(d) ['clear', 'copy', 'get', 'has_key', 'items', 'keys', 'setdefault', 'update', 'values'] >>> import odbchelper >>> dir(odbchelper) ['__builtins__', '__doc__', '__file__', '__name__', 'buildConnectionString']
li はリストなので, dir(li) はリストの全てのメソッドのリストを返します. 返り値のリストには, メソッドそのものではなく文字列としてのメソッド名が入っています. | |
d は辞書なので, dir(d) は辞書のメソッド名のリストを返します. その中の少くとも 1 つ keys は見覚えがあるはずです. | |
ここが本当に面白いところです. odbchelper はモジュールなので, dir(odbchelper) はモジュールで定義されたあらゆるもののリストを返し, その中には __name__ や __doc__ といった組み込みの属性や, その他の自作の属性やメソッドが全て含まれています. この例では, odbchelper はユーザが定義したメソッド, 2 章 で出てきた buildConnectionString 関数が 1 つだけあります. |
最後に, callable 関数は任意のオブジェクトを引数に取り, そのオブジェクトが呼び出し可能だったら True を返し, そうでなければ False を返します. 呼び出し可能なオブジェクトには関数, クラスのメソッド, さらにクラス自身が含まれます. (クラスについてはさらに次の章で扱います.)
>>> import string >>> string.punctuation '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~' >>> string.join <function join at 00C55A7C> >>> callable(string.punctuation) False >>> callable(string.join) True >>> print string.join.__doc__ join(list [,sep]) -> string Return a string composed of the words in list, with intervening occurrences of sep. The default separator is a single space. (joinfields and join are synonymous)
(依然として多くの人は join 関数を使っていますが) string モジュールの関数は非推奨 (deprecated) です. しかし string モジュールには, 標準の全ての句読記号を並べた string.punctuation のような, 役に立つ定数が多くあります. | |
string.join は文字列のリストを1つの文字列に結合する関数です. | |
string.punctuation は呼び出し可能ではありません. それは文字列です. (文字列は呼び出し可能なメソッドを持っていますが, 文字列そのものは呼び出し可能ではありません.) | |
string.join は呼び出し可能です. それは 2 つの引数を取る関数です. | |
呼び出し可能なオブジェクトにはたいてい doc string があります. callable 関数をオブジェクトの属性に使うことで, 事前にオブジェクトについて何も知らなくとも, どれが選びたい属性 (メソッド, 関数, クラス) でどれが無視する属性 (定数など) なのかを判定することができます. |
type, str, dir やその他全ての Python の組み込み関数は, __builtin__ と呼ばれる特別なモジュールにまとめられています. (前後に 2 つのアンダースコアが付いています.) 次のように考えてもらっても構いません. Python は起動時に自動的に from __builtin__ import * を実行し, 全ての“組み込み”関数を名前空間にインポートし直接使えるようにします.
このように考える利点は, __builtin__ モジュールの情報を取得することで, 組み込み関数や属性の情報にまとめてアクセスできることです. そして実はさ, Python には info という関数がありますよね. 今すぐ自身で実行してみて, リストをざっと眺めてください. 後でいくつかのさらに重要な関数たちに飛び込みます. (AttributeError のような, いくつかの組み込み例外クラスは既に見慣れているでしょう.)
>>> from apihelper import info >>> import __builtin__ >>> info(__builtin__, 20) ArithmeticError Base class for arithmetic errors. AssertionError Assertion failed. AttributeError Attribute not found. EOFError Read beyond end of file. EnvironmentError Base class for I/O related errors. Exception Common base class for all exceptions. FloatingPointError Floating point operation failed. IOError I/O operation failed. [...snip...]
Python には素晴しいリファレンスマニュアルが付いているので, それをじっくり読んで Python が提供してくれている全てのモジュールについて学ぶべきです. しかし, 他のほとんどの言語ではモジュールの使い方を思い出すのにマニュアルや man ページに戻って調べるのに対し, Python は大部分が自己文書化されています. |
<< オプションの引数と名前付きの引数を使う |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
オブジェクトへの参照を getattr で取得する >> |