2.3 組み込み関数

パイソンインタプリタはいつでも利用できるように組み込まれた多くの関数を持っています。ここではアルファベット順にリストしてあります。

__import__ (name[, globals[, locals[, fromlist]]])
この関数はimport文によって呼び出されます。これは、主にimport文の語義を変更するために互換インタフェースを持つ別の関数で置き換えられるようにするために存在しています。これを行う理由とやり方の例については、標準ライブラリモジュールihooksrexecを参照して下さい。また自分固有の__import__()関数を作るために役に立つ操作を定義してあるimp組み込みモジュールも参照して下さい。     

例えば、import spam__import__('spam', globals(), locals(), [])という呼び出しになります。 from spam.ham import eggsの結果は __import__('spam.ham', globals(), locals(), ['eggs'])になります。
注:locals()['eggs']が引数として渡されたとしても、__import__()関数はeggsというローカル変数をセットしません。 これはimport文ように生成されたその後のコードで行われます。(実際、標準的な実装ではlocals引数は全く使われず、globalsのみをimport文のパッケージコンテキストを決定するために使います。)

name変数がpackage.module形式の場合、通常nameという名前のモジュールではなくトップレベルパッケージ(最初のドットまでの名前)が返されます。しかし、空でないfromlist引数が与えられたときはnameという名前のモジュールが返されます。 これは異なる種類のimport文のために生成されたバイトコードとの互換性のために行われます。"import spam.ham.eggs"を使う場合、トップレベルパッケージspamはインポートしているネームスペース内におかれていなければなりません。しかし、"from spam.ham import eggs"を使った場合spam.hamサブパッケージがeggs変数を見付けるために使われます。

abs (x)
数値の絶対値を返します。引数は単純な整数またはロング整数または浮動小数です。 引数が複素数の場合はその大きさを返します。

apply (function, args[, keywords])
function引数は呼び出し可能オブジェクト(ユーザ定義や組み込み関数またはメソッドまたはクラスオブジェクト)でなければなりません。そしてargs引数はタプルでなければなりません。functionargsを引数リストとして呼び出されます。引数の数はタプルの長さになります。(これはfunc(args)呼び出しとは異なります。この場合は常に引数は一つです。) オプションのkeywords引数がある場合、それは文字列のキーを持つ辞書でなければなりません。これによって引数リストの最後にキーワード引数が付加されます。

callable (object)
引数objectが呼び出し可能のようであれば真をそうでなければ偽を返します。 真を返しても呼び出しが失敗する可能性は残っていますが、偽の場合はobjectのコールに成功することは決してありません。
注:クラスは呼び出し可能です(クラスの呼び出しは新しいインスタンスを返します)。 クラスインスタンスはそれが__call__()メソッドを持っていれば呼び出し可能です。

chr (i)
そのASCIIコードが整数iである一文字の文字列を返します。例えば、chr(97)'a'を返します。これはord()の逆です。 引数は[0..255]の範囲(両端を含む)でなければなりません。

cmp (x, y)
2つのオブジェクトxyを比較し、その結果によって整数を返します。 戻り値はx < yのときは負、x == yのときは0、x > yのときは正です。

coerce (x, y)
算術演算で使われる規則と同じ規則で共通タイプに変換された2つの数値引数からなるタプルを返します。

compile (string, filename, kind)
文字列をコードオブジェクトにコンパイルします。コードオブジェクトはexec文によって実行できるか、eval()で評価できます。 filename引数でそのコードが読み込まれたファイルを指定すべきです。例えば、ファイルから読み込まれなかったときは'<string>'を渡します。 kind引数はどのタイプのコードがコンパイルされなければならないかを指定します。stringが一連の文から構成されている場合には'exec'を、一つの式で構成されている場合には'eval'を、一つの対話文で構成される場合には'single'を指定することができます。(後者の場合None以外に評価される式は印刷されます。)

complex (real[, imag])
real + imag*jを持つ複素数を生成する。 各引数はどんな数値タイプ(複素数を含む)も許されます。 imagが省略されるとデフォルトは0です、また関数はint(), long(),float()のように数値変換関数として使えます。

delattr (object, name)
これはsetattr()の関連機能です。引数はオブジェクトと文字列です。 文字列はオブジェクトの属性の名前でなければなりません。この関数はその名前の属性を、もしオブジェクトが許せば削除します。例えば、 delattr(x, 'foobar')del x.foobarと同じです。

dir ()
引数無しの場合、現在のローカルシンボルテーブル内の名前のリストを返します。 引数があれば、そのオブジェクトに対する有効な属性のリストを返そうとします。 この情報は、定義されていればオブジェクトの__dict____methods____members__属性から収集されます。 このリストは必ずしも完全なものではありません。例えば、クラスに対してはベースクラスで定義された属性は含まれていませんし、クラスインスタンスに対してはメソッドは含まれていません。リストはアルファベット順にソートされています。
例:

>>> import sys
>>> dir()
['sys']
>>> dir(sys)
['argv', 'exit', 'modules', 'path', 'stderr', 'stdin', 'stdout']
>>>

divmod (a, b)
2つの数値を引数にとり、長除法を使ってその商と余りを返します。 オペランドのタイプが異なるときは、2項演算子に対する規則が適用されます。 単純な整数とロング整数に対しては、結果は (a / b, a % b)と同じです。 浮動小数に対しては、結果は (math.floor(a / b), a % b)と同じです。

eval (expression[, globals[, locals]])
引数は文字列と2つのオプションの辞書です。expression引数はパースされ、グローバルとローカルのネームスペースとしてglobalslocalsを使い(技術的に言えば条件リストです)パイソンの式として評価されます。 locals辞書が省略されるとglobals辞書がデフォルトになります。 両方の辞書が省略されると、式はevalが呼ばれた環境で評価されます。 戻り値は評価された式の結果です。文法エラーは例外として報告されます。
例:

>>> x = 1
>>> print eval('x+1')
2
>>>

この関数は任意のコードオブジェクト(例えばcompile()で生成された)を実行させるためにも使われます。 この場合文字列の代わりにコードオブジェクトを渡します。コードオブジェクトは kind引数に'eval'を渡してコンパイルされたものでなければなりません。

ヒント:文のダイナミック実行はexec文でサポートされています。 ファイルからの文の実行はexecfile()関数でサポートされています。 globals()locals()関数は、現在のグローバルとローカル辞書をそれぞれ返します。これはeval()execfile()に渡すときに役立ちます。

execfile (file[, globals[, locals]])
この関数はexec文と似ていますが、文字列の代わりにファイルをパースします。import文とはモジュール管理を使わない点で異なります。つまりファイルを無条件に読み込み、新しいモジュールを生成しません。 2.7

引数はファイル名と2つのオプションの辞書です。ファイルはパースされ、(モジュールと同じように)globalslocals辞書をグローバルとローカルネームスペースとして使ってパイソンの一連の文として評価されます。 locals辞書が省略されるとglobals辞書がデフォルトになります。 両方の辞書が省略されると、式はexecfile()が呼ばれた環境で評価されます。 戻り値はNoneです。

filter (function, list)
functionが真を返すlistの要素からなるリストを作ります。 listが文字列かタプルのときは結果もそのタイプになります。それ以外の場合は常にリストになります。functionNoneの場合は、恒等関数が仮定されます。つまり、listの要素のうち偽(0または空)となるすべての要素は削除されます。

float (x)
文字列または数値を浮動小数に変換します。引数が文字列の場合、(符号付き)10進数または浮動小数を含んでいなければなりません。これはstring.atof(x)と同じように機能します。一方、引数が単純な整数またはロング整数または浮動小数であっても、同じ値(パイソンの浮動小数の精度内で)が返されます。

getattr (object, name)
引数はオブジェクトと文字列です。文字列はオブジェクトの一つの属性名でなければなりません。結果はその属性が返されます。例えば、 getattr(x, 'foobar')x.foobarと同じです.

globals ()
現在のグローバルシンボルテーブルを表す辞書を返します。 これは常に現在のモジュールの辞書です。(関数やメソッドの内側では、これはそれが定義されているモジュールであり、それが呼び出されたモジュールではありません。)

hasattr (object, name)
引数はオブジェクトと文字列です。文字列がオブジェクトの属性名の一つである場合、結果は1となり、そうでなければ0になります。 (これはgetattr(object,name)を呼び出して例外が発生するかどうかをチェックすることで実装されています。)

hash (object)
オブジェクトのハッシュ値(持っていれば)を返します。ハッシュ値は整数です。 これは辞書の検索時に辞書のキーを速く比較するために使われます。 比較の結果等しい数値は同じハッシュ値を持っています。(たとえ1と1.0のように異なるタイプであっても)

hex (x)
整数値(どのようなサイズであっても)を16進数の文字列に変換します。 結果は有効なパイソンの式です。
注:これは常に符号無しリテラルを生成します。例えば、32-bitマシンでは hex(-1)'0xffffffff'を生成します。 同じワードサイズを持つマシンで評価されるとこのリテラルは-1と評価されます。 異なるワードサイズを持つマシンで評価されると大きな正の数となるか OverflowError例外を発生させます。

id (object)
オブジェクトの「身元(アイデンティティ)」を返します。これはこのオブジェクトの一生の間ユニークで変化しないことが保証された整数値です。(一生が重ならない2つのオブジェクトは同じid()値を持つかもしれません。)
(実装ノート:これはオブジェクトのアドレスです。)

input ([prompt])
eval(raw_input(prompt))とほとんど同じです。 raw_input()のようにprompt引数がオプションで、ロードできればreadlineモジュールが使われます。違いは、長い入力式をバックスラッシュを使って複数行に分割できる点です。

intern (string)
stringを「強制収容された」文字列テーブルに入れ、強制収容された文字列(string自身またはコピー)を返します。文字列を強制収容すれば辞書の検索パフォーマンスが少し向上します。何故なら辞書内のキーが強制収容されていてさらに検索キーが強制収容されていれば、キーの比較は(ハッシュ後)文字列比較の代わりにポインタ比較で行うことができるからです。 通常、パイソンプログラムで使われる名前は自動的に強制収容され、モジュール、クラスまたはインスタンス属性を保持するために使われる辞書は強制収容されたキーを持っています。強制収容された文字列は不滅(つまり決してゴミとして集められることはありません)です。

int (x)
文字列または数値を単純な整数に変換します。引数が文字列のときはパイソンの整数として表現できる10進数を含んでいなければなりません。この関数はstring.atoi(x)と同じように機能します。文字列以外には単純な整数、ロング整数、浮動小数が引数に指定できます。浮動小数の整数への変換はC言語の語義で定義されています。通常その変換では0に近付くように切捨てられます。 2.8

isinstance (object, class)
object引数がclass引数のインスタンスであるか、その(直接または間接の)サブクラスであれば真を返します。またclassがタイプオブジェクトであり objectがそのタイプのオブジェクトであれば真を返します。 objectがクラスインスタンスでないか与えられたタイプのオブジェクトでなければ常に偽を返します。classがクラスオブジェクトでないかタイプオブジェクトでない場合にはTypeError例外が発生します。

issubclass (class1, class2)
class1class2の(直接または間接の)サブクラスであれば真を返します。クラスはそれ自身のサブクラスと考えられます。引数がクラスオブジェクトでなければTypeError例外が発生します。

len (s)
オブジェクトの長さ(アイテムの個数)を返します。引数はシーケンス(文字列、タプルまたはリスト)またはマッピング(辞書)かも知れません。

list (sequence)
sequenceのアイテムと同じアイテムを同じ順序で持ったリストを返します。 sequenceがリストであればsequence[:]と同じようにコピーが作られ返されます。例えば、 list('abc')['a', 'b', 'c']を返し、list( (1, 2, 3) )[1, 2, 3]を返します。

locals ()
現在のローカルシンボルテーブルを表す辞書を返します。関数の内部ではこの辞書を変更しても必ずしも望む効果は得られません。

long (x)
文字列または数値をロング整数に変換します。引数が文字列のときは任意のサイズの10進数を含んでいなければなりません。この関数はstring.atol(x)と同じように機能します。文字列以外には単純な整数、ロング整数、浮動小数が引数に指定でき、同じ値を持つロング整数が返されます。浮動小数の整数への変換はC言語の語義で定義されています。int()の説明を参照して下さい。

map (function, list, ...)
listのすべてのアイテムにfunctionを適用し結果のリストを返します。 オプションのlist引数が渡される場合、functionは同じ個数の引数を持たなければならず、すべてのリストのアイテムに同時に適用されます。 リストが他のリストより短いときはNoneアイテムで拡張されていると仮定されます。functionNoneであれば、恒等関数が仮定されます。つまり、複数のリスト引数があれば、map()はすべてのリストから対応するアイテムを含むタプルを要素とするリストを返します。list引数はどのようなシーケンス種別でもかまいません。結果は常にリストです。

max (s)
空でないシーケンス(文字列、タプルまたはリスト)の最も大きいアイテムを返します。

min (s)
空でないシーケンス(文字列、タプルまたはリスト)の最も小さいアイテムを返します。

oct (x)
整数値(どのようなサイズでもよい)を8進数文字列に変換します。結果は有効なパイソンの式です。
注:これは常に符号無しリテラルを生成します。例えば32-bitマシンではoct(-1)'037777777777'を生成します。同じワードサイズを持つマシンではこのリテラルは-1と評価されますが、異なるワードサイズを持つマシンで評価されると大きな正の数となるか OverflowError例外を発生させます。

open (filename[, mode[, bufsize]])
新しいファイルオブジェクト(前の組み込みタイプのところで説明されています)を返します。最初の2つの引数はstdiofopen()に対するものと同じです。filenameはオープンされるファイル名で、modeはファイルがどのようにオープンされるかを示しています。'r'は読み出し、'w'は書き込み(既存ファイルを切り詰める)、そして'a'は追加(あるUnixシステムでは現在のファイル位置に関係なくすべてがファイルの最後に追加して書くことを意味しています)用にオープンします。
モード'r+''w+''a+'は根底にあるstdioライブラリがこれを理解できれば、ファイルを更新用にオープンします。 バイナリとテキストファイルに違いがあるシステムでは、'b'をモードに付加すればバイナリモードでファイルをオープンします。ファイルがオープンできなければ IOErrorが発生します。
modeが省略されると'r'が仮定されます。 オプションのbufsize引数はそのファイルの望ましいバッファサイズを指定します。0はバッファリングしないことを意味し、1は行でバッファリングすることを意味し、他の正の値は大体そのサイズのバッファを使うことを意味します。負のbufsizeはシステムのデフォルトを使うことを意味します。これは通常ttyに対しては行でバッファリングし、他のファイルに対しては完全なバッファリングを行います。 2.9

ord (c)
一文字の文字列のASCII値を返します。例えば、ord('a')は整数97を返します。これはchr()の逆です。

pow (x, y[, z])
xy乗を返します。zがあればxy乗のモジュロz(pow(x, y) % zより効率よく計算されます)を返します。引数は数値タイプでなければなりません。オペランドのタイプが異なる場合、2項算術演算の規則が適用されます。その実際のオペランドタイプは結果のタイプにもなります。結果がこのタイプで表現できなければ、この関数は例外を発生させます。例えば、pow(2, -1)またはpow(2, 35000)は許されません。

range ([start,] stop[, step])
これは等差数列を含むリストを生成するための融通のきく関数です。 forループの中で頻繁に使われます。引数は単純な整数でなければなりません。step引数が省略されると1が仮定されます。start引数が省略されると0が仮定されます。完全な形式は単純な整数リスト [start, start + step, start + 2 * step, ...]を返します。 stepは正なら最後の要素はstopより小さく最も大きい start + i * stepです。 stepが負なら最後の要素はstopより大きく最も大きい start + i * stepです。 stepは0以外でなければなりません。(そうでなければValueErrorが発生します。)
例:

>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 11)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> range(0, 30, 5)
[0, 5, 10, 15, 20, 25]
>>> range(0, 10, 3)
[0, 3, 6, 9]
>>> range(0, -10, -1)
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> range(0)
[]
>>> range(1, 0)
[]
>>>

raw_input ([prompt])
prompt引数があれば、標準出力に改行を付加せずに出力します。そして入力から一行読み込み、それを文字列(改行を取り除いて)に変換して返します。最初にEOFを読むとEOFErrorが発生します。

>>> s = raw_input('--> ')
--> Monty Python's Flying Circus
>>> s
"Monty Python's Flying Circus"
>>>

readlineモジュールがロードされていれば、raw_input()はそれを使って役に立つ行編集と履歴機能を提供します。

reduce (function, list[, initializer])
2項演算を行うfunctionlistのアイテムを適用し、リストを一つの値に換算します。例えば、 reduce(lambda x, y: x*y, list, 1)listの要素の積を返します。オプションのinitializerは空listを換算できるようにlistの前に付加されたと考えることができます。list引数はどのようなシーケンスタイプでもかまいません。

reload (module)
すでにインポートされているmoduleの再パースと再初期化を行います。 引数はモジュールオブジェクトでなければなりません。従ってそれは以前にうまくインポートされていなければなりません。 これは外部エディタを使ってモジュールソースを編集している場合に、パイソンインタプリタを終了せず新しいバージョンを試してみたいときに役立ちます。 戻り値はモジュールオブジェクトです。(つまりmodule引数と同じです。)

警告がいくつかあります。

モジュールは文法的に正しいが初期化に失敗するときは、最初のimport文は その名前をローカルにバインドせず、(部分的に初期化された)モジュールオブジェクトをsys.modulesに保存します。そのモジュールを再ロードするためには、reload()する前に先ずimportし直さなければなりません(これはその名前を部分的に初期化されたモジュールオブジェクトにバインドします)。

モジュールが再ロードされたとき、その辞書(モジュールのグローバル変数を含む)は保持されています。名前の再定義は古い定義を上書きします。従って一般的には問題はありません。もし新しいバージョンのモジュールが古いバージョンで定義されていた名前を定義していないときは、古い定義は残っています。この機能はグローバルテーブルやオブジェクトのキャッシュを維持するときにモジュールの利点として使うことができます。たとえばtry文を使えば、テーブルの存在をテストしたり必要なら初期化をスキップすることができます。

sys__main____builtin__を除いては、組み込みまたは動的にロードされるモジュールを再ロードすることは 一般的には合法ですが大変役に立つということではありません。 しかしあるケースでは、拡張モジュールは一回以上初期化されるようには設計されていなくて、再ロードしたときに気まぐれな感じで失敗することもあります。

モジュールがfrom... import ...を使って他のモジュールからオブジェクトをインポートしている場合、他のモジュールに対するreload()の呼び出しではそれからインポートされたオブジェクトを再定義することはありません。 これに対する一つの回避策はfrom文を再実行することで、別の方法はimportと修飾名(module.name)を代わりに使うことです。

モジュールがクラスのインスタンスをインスタンス化するときは、クラスを定義するモジュールを再ロードすることはインスタンスのメソッド定義に影響を与えません。 インスタンスは古いクラス定義を使い続けます。同じことは導出されたクラスについても言えます。

repr (object)
オブジェクトの印刷可能な表現を含む文字列を返します。 これはコンバージョン(バッククオート)により生成される値と同じです。 通常の関数としてこの演算にアクセスできることは時に役に立ちます。 多くのタイプに対して、この関数はeval()に渡された場合と同じ値を持ったオブジェクトを生成する文字列を返そうとします。

round (x, n)
小数点以下n桁に丸められた浮動小数値xを返します。 nが省略されると0が仮定されます。結果は浮動小数です。値は最も近い10のマイナスn乗の倍数に丸められます。2つの倍数が同じように接近していれば0から離れるように丸められます。(従って、round(0.5)1.0になり、round(-0.5)-1.0になります。)

setattr (object, name, value)
これはgetattr()の反対の機能です。引数はオブジェクトと文字列と任意の値です。文字列はオブジェクトの属性名の一つでなければなりません。オブジェクトが許せば関数はその値を属性に代入します。例えば、 setattr(x, 'foobar', 123)x.foobar = 123と同じです。

slice ([start,] stop[, step])
range(start, stop, step)で指定されたインデックスの組で表現されるスライスオブジェクトを返します。 startstep引数は省略されるとNoneが仮定されます。スライスオブジェクトは読み出し専用のデータ属性startstopstepという引数の値(またはデフォルト値)を返すだけの属性を持っています。それはその他の明示的な機能を持っていません。しかし、それはNumerical Python と他のサードパーティの拡張モジュールでは使われています。 スライスオブジェクトは拡張されたインデックス用文法が使われる場合にも生成されます。例えば、"a[start:stop:step]"や"a[start:stop, i]"に対して生成されます。

str (object)
オブジェクトの適切な印刷可能な表現を含む文字列を返します。 文字列に対しては文字列自身を返します。repr(object)との違いは、 str(object)は必ずしもeval()が受け入れられる文字列を返そうとはしないということです。これの目的は印刷できる文字列を返すことです。

tuple (sequence)
sequenceのアイテムと同じアイテムを同じ順序で持つタプルを返します。 sequenceが既にタプルであればそのまま返します。例えば、 tuple('abc')('a', 'b', 'c')を返し、tuple([1, 2, 3])(1, 2, 3)を返します。

type (object)
objectのタイプを返します。戻り値はタイプオブジェクトです。標準モジュール typesはすべての組み込みタイプに対する名前を定義しています。   例えば、

>>> import types
>>> if isinstance(x, types.StringType): print "It's a string"

vars ([object])
引数がないと、現在のローカルシンボルテーブルに対応した辞書を返します。 モジュール、クラス、クラスインスタンスオブジェクト(または__dict__属性を持つその他のもの)を引数として指定すると、オブジェクトのシンボルテーブルに対応する辞書を返します。返された辞書は変更すべきではありません。対応するシンボルテーブルへの影響は不確定です。 2.10

xrange ([start,] stop[, step])
この関数はrange()に非常に良く似ていますがリストの代わりに``xrange object''を返します。これは実際にはすべてを同時には格納せず対応するリストと同じ値を生成する不透明なシーケンスタイプです。range()に対するxrange()の利点は以下のような場合を除いては僅かです。(なぜならxrange()は値が必要になるとそれを生成しなければなりません。) メモリが枯渇しやすいマシン(MS-DOSなど)で非常に大きなrangeが使われる場合、または rangeの要素をすべて使うことが決してない場合(ループが通常はbreakで終了する時など)に有効です。

guido@python.org