2. 組み込み関数¶
Python インタプリタには数多くの関数と型が組み込まれており、いつでも利用できます。それらをここにアルファベット順に挙げます。
-
abs
(x)¶ 数の絶対値を返します。引数は整数または浮動小数点数です。引数が複素数なら、その絶対値 (magnitude) が返されます。
-
all
(iterable)¶ iterable の全ての要素が真ならば (もしくは iterable が空ならば)
True
を返します。以下のコードと等価です:def all(iterable): for element in iterable: if not element: return False return True
-
any
(iterable)¶ iterable のいずれかの要素が真ならば
True
を返します。iterable が空ならFalse
を返します。以下のコードと等価です:def any(iterable): for element in iterable: if element: return True return False
-
ascii
(object)¶ repr()
と同様、オブジェクトの印字可能な表現を含む文字列を返しますが、repr()
によって返された文字列中の非 ASCII 文字は\x
、\u
、\U
エスケープを使ってエスケープされます。これは Python 2 のrepr()
によって返されるのと同じ文字列を作ります。
-
bin
(x)¶ Convert an integer number to a binary string. The result is a valid Python expression. If x is not a Python
int
object, it has to define an__index__()
method that returns an integer.
-
class
bool
([x])¶ ブール値、即ち
True
またはFalse
のどちらかを返します。x は標準の 真理値判定手続き を用いて変換されます。x が偽または省略されている場合、この関数はFalse
を返します。それ以外の場合、True
を返します。bool
クラスはint
クラスの派生クラスです(数値型 int, float, complex を参照してください)。このクラスからさらに派生することはできません。ブール値のインスタンスはFalse
とTrue
のみです(ブール値 を参照してください)。
-
class
bytearray
([source[, encoding[, errors]]])¶ 新しいバイト配列を返します。
bytearray
クラスは0 <= x < 256の範囲の整数からなる変更可能な配列です。ミュータブルなシーケンス型 に記述されている変更可能な配列に対する普通のメソッドの大半を備えています。また、bytes
型が持つメソッドの大半も備えています(see bytes と bytearray の操作)。オプションの source 引数は、配列を異なる方法で初期化するのに使われます:
- 文字列 の場合、 encoding (と、オプションの errors) 引数も与えなければなりません。このとき
bytearray()
は文字列をstr.encode()
でバイトに変換して返します。 - 整数 の場合、配列はそのサイズになり、null バイトで初期化されます。
- バッファ インタフェースに適合するオブジェクトの場合、そのオブジェクトの読み出し専用バッファがバイト配列の初期化に使われます。
- イテラブル の場合、範囲
0 <= x < 256
内の整数のイテラブルでなければならず、それらが配列の初期の内容として使われます。
引数がなければ、長さ 0 の配列が生成されます。
バイナリシーケンス型 --- bytes, bytearray, memoryview と bytearray オブジェクト も参照してください。
- 文字列 の場合、 encoding (と、オプションの errors) 引数も与えなければなりません。このとき
-
class
bytes
([source[, encoding[, errors]]])¶ 範囲
0 <= x < 256
の整数のイミュータブルなシーケンスである "bytes" オブジェクトを返します。bytes
はbytearray
のイミュータブル版です。オブジェクトを変化させないようなメソッドや、インデクシングやスライシングのふるまいは、これと同様のものです。従って、コンストラクタ引数は
bytearray()
のものと同様に解釈されます。バイト列オブジェクトはリテラルでも生成できます。 文字列およびバイト列リテラル を参照してください。
バイナリシーケンス型 --- bytes, bytearray, memoryview, Bytes, bytes と bytearray の操作 も参照してください。
-
callable
(object)¶ object 引数が呼び出し可能オブジェクトであれば
True
を、そうでなければFalse
を返します。この関数が真を返しても、呼び出しは失敗する可能性がありますが、偽であれば、 object の呼び出しは決して成功しません。なお、クラスは呼び出し可能 (クラスを呼び出すと新しいインスタンスを返します) です。また、インスタンスはクラスが__call__()
メソッドを持つなら呼び出し可能です。バージョン 3.2 で追加: この関数は Python 3.0 で一度取り除かれましたが、Python 3.2 で復活しました。
-
chr
(i)¶ Unicode コードポイントが整数 i である文字を表す文字列を返します。例えば
chr(97)
は文字列'a'
を、chr(8364)
は文字列'€'
を返します。ord()
の逆です。引数の有効な範囲は 0 から 1,114,111 (16 進数で 0x10FFFF) です。 i が範囲外の場合
ValueError
が送出されます。
-
classmethod
(function)¶ Return a class method for function.
クラスメソッドは、インスタンスメソッドが暗黙の第一引数としてインスタンスをとるように、第一引数としてクラスをとります。クラスメソッドを宣言するには、以下のイディオムを使います:
class C: @classmethod def f(cls, arg1, arg2, ...): ...
@classmethod
形式は関数デコレータ (decorator) です。詳しくは 関数定義 の関数定義の説明を参照してください。このメソッドはクラスで呼び出すこと (例えば
C.f()
) も、インスタンスとして呼び出すこと (例えばC().f()
) もできます。インスタンスはそのクラスが何であるかを除いて無視されます。クラスメソッドが派生クラスに対して呼び出された場合、派生したクラスオブジェクトが暗黙の第一引数として渡されます。クラスメソッドは C++ や Java の静的メソッドとは異なります。静的メソッドは、この節の
staticmethod()
を参照してください。クラスメソッドについて詳しい情報は、 標準型の階層 の標準型階層のドキュメントを参照してください。
-
compile
(source, filename, mode, flags=0, dont_inherit=False, optimize=-1)¶ source をコードオブジェクト、もしくは、 AST オブジェクトにコンパイルします。 コードオブジェクトは
exec()
文で実行したり、eval()
呼び出しで評価できます。 source は通常の文字列、 バイト列、 AST オブジェクトのいずれでもかまいません。 AST オブジェクトへの、また、 AST オブジェクトからのコンパイルの方法は、ast
モジュールのドキュメントを参照してください。filename 引数には、コードの読み出し元のファイルを与えなければなりません; ファイルから読み出されるのでなければ、認識可能な値を渡して下さい (
'<string>'
が一般的に使われます)。mode 引数は、コンパイルされるコードの種類を指定します; source が一連の文から成るなら
'exec'
、単一の式から成るなら'eval'
、単一の対話的文の場合'single'
です。(後者の場合、評価がNone
以外である式文が印字されます)。The optional arguments flags and dont_inherit control which future statements (see PEP 236) affect the compilation of source. If neither is present (or both are zero) the code is compiled with those future statements that are in effect in the code that is calling
compile()
. If the flags argument is given and dont_inherit is not (or is zero) then the future statements specified by the flags argument are used in addition to those that would be used anyway. If dont_inherit is a non-zero integer then the flags argument is it -- the future statements in effect around the call to compile are ignored.future 文はビットフィールドで指定されます。ビットフィールドはビット単位の OR を取ることで複数の文を指定することができます。特定の機能を指定するために必要なビットフィールドは、
__future__
モジュールの_Feature
インスタンスにおけるcompiler_flag
属性で得られます。引数 optimize は、コンパイラの最適化レベルを指定します; デフォルトの値
-1
は、インタプリタの-O
オプションで与えられるのと同じ最適化レベルを選びます。明示的なレベルは、0
(最適化なし、__debug__
は真)、1
(assert は取り除かれ、__debug__
は偽)、2
(docstring も取り除かれる) です。この関数は、コンパイルされたソースが不正である場合
SyntaxError
を、ソースがヌルバイトを含む場合ValueError
を送出します。Python コードをパースしてその AST 表現を得たいのであれば、
ast.parse()
を参照してください。注釈
複数行に渡るコードの文字列を
'single'
や'eval'
モードでコンパイルするとき、入力は一つ以上の改行文字で終端されなければなりません。これは、code
モジュールで不完全な文と完全な文を検知しやすくするためです。バージョン 3.2 で変更: Windows や Mac の改行も受け付けます。また
'exec'
モードでの入力が改行で終わっている必要もありません。optimize 引数が追加されました。バージョン 3.5 で変更: 以前は source にヌルバイトがあったときに
TypeError
を送出していました。
-
class
complex
([real[, imag]])¶ 値 real + imag*1j の複素数を返すか、文字列や数を複素数に変換します。第一引数が文字列なら、それが複素数と解釈され、この関数は第二引数無しで呼び出されなければなりません。第二引数は文字列であってはなりません。それぞれの引数は (複素数を含む) 任意の数値型です。 imag が省略された場合、標準の値はゼロで、このコンストラクタは
int
やfloat
のような数値変換としてはたらきます。両方の引数が省略された場合、0j
を返します。注釈
文字列から変換するとき、その文字列は中央の
+
や-
演算子の周りに空白を含んではなりません。例えば、complex('1+2j')
はいいですが、complex('1 + 2j')
はValueError
を送出します。複素数型については 数値型 int, float, complex に説明があります。
-
delattr
(object, name)¶ setattr()
の親戚です。引数はオブジェクトと文字列です。文字列はオブジェクトの属性のうち一つの名前でなければなりません。この関数は、オブジェクトが許すなら、指名された属性を削除します。例えば、delattr(x, 'foobar')
はdel x.foobar
と等価です。
-
class
dict
(**kwarg) -
class
dict
(mapping, **kwarg) -
class
dict
(iterable, **kwarg) 新しい辞書を作成します。
dict
オブジェクトは辞書クラスです。このクラスに関するドキュメンテーションはdict
と マッピング型 --- dict を参照してください。他のコンテナについては、 ビルトインの
list
,set
,tuple
クラスおよびcollections
モジュールを参照してください。
-
dir
([object])¶ 引数がない場合、現在のローカルスコープにある名前のリストを返します。引数がある場合、そのオブジェクトの有効な属性のリストを返そうと試みます。
オブジェクトが
__dir__()
という名のメソッドを持つなら、そのメソッドが呼び出され、属性のリストを返さなければなりません。これにより、カスタムの__getattr__()
や__getattribute__()
関数を実装するオブジェクトは、dir()
が属性を報告するやり方をカスタマイズできます。オブジェクトが
__dir__()
を提供していない場合、定義されていればオブジェクトの__dict__
属性から、そして型オブジェクトから、情報を収集しようと試みます。結果のリストは完全であるとは限らず、また、カスタムの__getattr__()
を持つ場合、不正確になるかもしれません。デフォルトの
dir()
メカニズムは、完全というより最重要な情報を作成しようとするため、異なる型のオブジェクトでは異なって振る舞います:- オブジェクトがモジュールオブジェクトの場合、リストにはモジュールの属性の名前が含まれます。
- オブジェクトが型オブジェクトやクラスオブジェクトの場合、リストにはその属性の名前と、再帰的にたどったその基底クラスの属性が含まれます。
- それ以外の場合には、リストにはオブジェクトの属性名、クラス属性名、再帰的にたどった基底クラスの属性名が含まれます。
返されるリストはアルファベット順に並べられています。例えば:
>>> import struct >>> dir() # show the names in the module namespace ['__builtins__', '__name__', 'struct'] >>> dir(struct) # show the names in the struct module # doctest: +SKIP ['Struct', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__initializing__', '__loader__', '__name__', '__package__', '_clearcache', 'calcsize', 'error', 'pack', 'pack_into', 'unpack', 'unpack_from'] >>> class Shape: ... def __dir__(self): ... return ['area', 'perimeter', 'location'] >>> s = Shape() >>> dir(s) ['area', 'location', 'perimeter']
注釈
dir()
は主に対話プロンプトでの使用に便利なように提供されているので、厳密性や一貫性を重視して定義された名前のセットというよりも、むしろ興味を引くような名前のセットを返そうとします。また、この関数の細かい動作はリリース間で変わる可能性があります。例えば、引数がクラスであるとき、メタクラス属性は結果のリストに含まれません。
-
divmod
(a, b)¶ 2 つの (複素数でない) 数を引数として取り、整数の除法を行ったときの商と剰余からなる対を返します。混合した被演算子型では、二項算術演算子での規則が適用されます。整数では、結果は
(a // b, a % b)
と同じです。浮動小数点数では、結果は(q, a % b)
で、ここで q は通常math.floor(a / b)
ですが、それより 1 小さくなることもあります。いずれにせよ、q * b + a % b
は a に非常に近く、a % b
がゼロでなければその符号は b と同じで、0 <= abs(a % b) < abs(b)
です。
-
enumerate
(iterable, start=0)¶ enumerate オブジェクトを返します。 iterable は、シーケンスか iterator か、あるいはイテレーションをサポートするその他のオブジェクトでなければなりません。
enumerate()
によって返されたイテレータの__next__()
メソッドは、 (デフォルトでは 0 となる start からの) カウントと、 iterable 上のイテレーションによって得られた値を含むタプルを返します。>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter'] >>> list(enumerate(seasons)) [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')] >>> list(enumerate(seasons, start=1)) [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
次と等価です:
def enumerate(sequence, start=0): n = start for elem in sequence: yield n, elem n += 1
-
eval
(expression, globals=None, locals=None)¶ 文字列とオプションの引数 globals、locals をとります。globals を与える場合は辞書でなくてはなりません。locals を与える場合は任意のマッピングオブジェクトにできます。
The expression argument is parsed and evaluated as a Python expression (technically speaking, a condition list) using the globals and locals dictionaries as global and local namespace. If the globals dictionary is present and lacks '__builtins__', the current globals are copied into globals before expression is parsed. This means that expression normally has full access to the standard
builtins
module and restricted environments are propagated. If the locals dictionary is omitted it defaults to the globals dictionary. If both dictionaries are omitted, the expression is executed in the environment whereeval()
is called. The return value is the result of the evaluated expression. Syntax errors are reported as exceptions. Example:>>> x = 1 >>> eval('x+1') 2
この関数は (
compile()
で生成されるような) 任意のコードオブジェクトを実行するのにも利用できます。この場合、文字列の代わりにコードオブジェクトを渡します。このコードオブジェクトが、引数 mode を'exec'
としてコンパイルされている場合、eval()
が返す値はNone
になります。ヒント:
exec()
関数により文の動的な実行がサポートされています。globals()
およびlocals()
関数は、それぞれ現在のグローバルおよびローカルな辞書を返すので、それらをeval()
やexec()
に渡して使うことができます。リテラルだけを含む式の文字列を安全に評価できる関数、
ast.literal_eval()
も参照してください。
-
exec
(object[, globals[, locals]])¶ この関数は Python コードの動的な実行をサポートします。 object は文字列かコードオブジェクトでなければなりません。文字列なら、その文字列は一連の Python 文として解析され、そして (構文エラーが生じない限り) 実行されます。 [1] コードオブジェクトなら、それは単純に実行されます。どの場合でも、実行されるコードはファイル入力として有効であることが期待されます (リファレンスマニュアルの節 "file-input" を参照)。なお、
return
およびyield
文は、exec()
関数に渡されたコードの文脈中においてさえ、関数定義の外では使えません。返り値はNone
です。いずれの場合でも、オプションの部分が省略されると、コードは現在のスコープ内で実行されます。globals だけが与えられたなら、辞書でなくてはならず、グローバル変数とローカル変数の両方に使われます。globals と locals が与えられたなら、それぞれグローバル変数とローカル変数として使われます。locals を指定する場合は何らかのマップ型オブジェクトでなければなりません。モジュールレベルでは、グローバルとローカルは同じ辞書です。exec が globals と locals として別のオブジェクトを取った場合、コードはクラス定義に埋め込まれたかのように実行されます。
globals 辞書がキー
__builtins__
に対する値を含まなければ、そのキーに対して、組み込みモジュールbuiltins
の辞書への参照が挿入されます。ですから、実行されるコードをexec()
に渡す前に、 globals に自作の__builtins__
辞書を挿入することで、コードがどの組み込みを利用できるか制御できます。
-
filter
(function, iterable)¶ iterable の要素のうち function が真を返すものでイテレータを構築します。iterable はシーケンスか、反復をサポートするコンテナか、イテレータです。function が
None
なら、恒等関数を仮定します。すなわち、iterable の偽である要素がすべて除去されます。なお、
filter(function, iterable)
は、関数がNone
でなければジェネレータ式(item for item in iterable if function(item))
と同等で、関数がNone
なら(item for item in iterable if item)
と同等です。function が偽を返すような iterable の各要素を返す補完的関数は、
itertools.filterfalse()
を参照してください。
-
class
float
([x])¶ 数または文字列 x から生成された浮動小数点数を返します。
引数が文字列の場合、10進数を含んだ文字列にしてください。先頭に符号が付いていたり、空白中に埋め込まれていてもかまいません。符号として
'+'
か'-'
を追加できます。'+'
は、作られる値に何の影響も与えません。引数は NaN (not-a-number) や正負の無限大を表す文字列でもかまいません。正確には、入力は、前後の空白を取り除いた後に以下の文法に従う必要があります:sign ::= "+" | "-" infinity ::= "Infinity" | "inf" nan ::= "nan" numeric_value ::=
floatnumber
|infinity
|nan
numeric_string ::= [sign
]numeric_value
ここで
floatnumber
は 浮動小数点数リテラル で記述されている Python の浮動小数点数リテラルです。大文字か小文字かは関係なく、例えば "inf"、 "Inf"、 "INFINITY" 、 "iNfINity" は全て正の無限大として使える綴りです。一方で、引数が整数または浮動小数点数なら、(Python の浮動小数点数の精度で) 同じ値の浮動小数点数が返されます。引数が Python の浮動小数点数の範囲外なら、
OverflowError
が送出されます。一般の Python オブジェクト
x
に対して、float(x)
はx.__float__()
に委譲します。引数が与えられなければ、
0.0
が返されます。例:
>>> float('+1.23') 1.23 >>> float(' -12345\n') -12345.0 >>> float('1e-003') 0.001 >>> float('+1E6') 1000000.0 >>> float('-Infinity') -inf
浮動小数点数型については、 数値型 int, float, complex も参照してください。
-
format
(value[, format_spec])¶ value を format_spec で制御される "書式化された" 表現に変換します。 format_spec の解釈は value 引数の型に依存しますが、ほとんどの組み込み型で使われる標準的な構文が存在します: 書式指定ミニ言語仕様 。
デフォルトの format_spec は空の文字列です。それは通常
str(value)
の呼び出しと同じ結果になります。format(value, format_spec)
の呼び出しは、type(value).__format__(value, format_spec)
に翻訳され、これは value の__format__()
メソッドの検索をするとき、インスタンス辞書を回避します。このメソッドの探索がobject
に到達しても format_spec が空にならなかったり、 format_spec や返り値が文字列でなかったりした場合、TypeError
が送出されます。バージョン 3.4 で変更: format_spec が空の文字列でない場合
object().__format__(format_spec)
はTypeError
を送出します。
-
class
frozenset
([iterable]) 新しい
frozenset
オブジェクトを返します。オプションで iterable から得られた要素を含みます。frozenset
はビルトインクラスです。このクラスに関するドキュメントはfrozenset
と set(集合)型 --- set, frozenset を参照してください。他のコンテナについては、ビルトインクラス
set
,list
,tuple
,dict
やcollections
モジュールを見てください。
-
getattr
(object, name[, default])¶ object の指名された属性の値を返します。 name は文字列でなくてはなりません。文字列がオブジェクトの属性の一つの名前であった場合、戻り値はその属性の値になります。例えば、
getattr(x, 'foobar')
はx.foobar
と等価です。指名された属性が存在しない場合、 default が与えられていればそれが返され、そうでない場合にはAttributeError
が送出されます。
-
globals
()¶ 現在のグローバルシンボルテーブルを表す辞書を返します。これは常に現在のモジュール (関数やメソッドの中では、それを呼び出したモジュールではなく、それを定義しているモジュール) の辞書です。
-
hasattr
(object, name)¶ 引数はオブジェクトと文字列です。文字列がオブジェクトの属性名の一つであった場合
True
を、そうでない場合False
を返します。 (この関数は、getattr(object, name)
を呼び出してAttributeError
を送出するかどうかを見ることで実装されています。)
-
hash
(object)¶ - オブジェクトのハッシュ値を (存在すれば) 返します。ハッシュ値は整数です。これらは辞書を検索する際に辞書のキーを高速に比較するために使われます。等しい値となる数値は等しいハッシュ値を持ちます (1 と 1.0 のように型が異なっていてもです)。
注釈
独自の
__hash__()
メソッドを実装したオブジェクトを使う場合、hash()
が実行するマシンのビット幅に合わせて戻り値を切り捨てることに注意してください。詳しくは__hash__()
を参照してください。
-
help
([object])¶ 組み込みヘルプシステムを起動します。(この関数は対話的な使用のためのものです。) 引数が与えられていない場合、対話的ヘルプシステムはインタプリタコンソール上で起動します。引数が文字列の場合、文字列はモジュール、関数、クラス、メソッド、キーワード、またはドキュメントの項目名として検索され、ヘルプページがコンソール上に印字されます。引数がその他のオブジェクトの場合、そのオブジェクトに関するヘルプページが生成されます。
この関数は、
site
モジュールから、組み込みの名前空間に移されました。
-
hex
(x)¶ Convert an integer number to a lowercase hexadecimal string prefixed with "0x", for example:
>>> hex(255) '0xff' >>> hex(-42) '-0x2a'
If x is not a Python
int
object, it has to define an __index__() method that returns an integer.16を底として16進数文字列を整数に変換するには
int()
も参照してください。注釈
浮動小数点数の16進文字列表記を得たい場合には、
float.hex()
メソッドを使って下さい。
-
id
(object)¶ オブジェクトの "識別値" を返します。この値は整数で、このオブジェクトの有効期間中は一意かつ定数であることが保証されています。有効期間が重ならない 2 つのオブジェクトは同じ
id()
値を持つかもしれません。CPython implementation detail: This is the address of the object in memory.
-
input
([prompt])¶ 引数 prompt が存在すれば、それが末尾の改行を除いて標準出力に書き出されます。次に、この関数は入力から 1 行を読み込み、文字列に変換して (末尾の改行を除いて) 返します。 EOF が読み込まれたとき、
EOFError
が送出されます。例:>>> s = input('--> ') --> Monty Python's Flying Circus >>> s "Monty Python's Flying Circus"
readline
モジュールが読み込まれていれば、input()
はそれを使って精緻な行編集やヒストリ機能を提供します。
-
class
int
(x=0)¶ -
class
int
(x, base=10) Return an integer object constructed from a number or string x, or return
0
if no arguments are given. If x is a number, returnx.__int__()
. For floating point numbers, this truncates towards zero.x が数値でない、あるいは base が与えられた場合、 x は文字列、
bytes
インスタンス、bytearray
インスタンスのいずれかで、基数 base の 整数リテラル で表されたものでなければなりません。 オプションで、リテラルの前に+
あるいは-
を (中間のスペースなしで) 付けることができます。 また、リテラルは余白で囲むことができます。 基数 n のリテラルは、 0 から n-1 の数字に値 10-35 を持つa
からz
(またはA
からZ
) を加えたもので構成されます。 デフォルトの base は 10 です。 許される値は 0 と 2--36 です。 基数 2, 8, 16 のリテラルは、別の記法としてコード中の整数リテラルのように0b
/0B
,0o
/0O
,0x
/0X
を前に付けることができます。 基数 0 はコードリテラルとして厳密に解釈することを意味します。 その結果、実際の基数は 2, 8, 10, 16 のどれかになります。 したがってint('010', 0)
は有効ではありませんが、int('010')
やint('010', 8)
は有効です。整数型については、 数値型 int, float, complex も参照してください。
バージョン 3.4 で変更: base が
int
のインスタンスでなく、base オブジェクトがbase.__index__
メソッドを持っている場合、そのメソッドを呼んで底に対する整数を得ることができます。以前のバージョンではbase.__index__
ではなくbase.__int__
を使用していました。
-
isinstance
(object, classinfo)¶ object 引数が classinfo 引数のインスタンスであるか、 (直接、間接、または 仮想) サブクラスのインスタンスの場合に真を返します。 object が与えられた型のオブジェクトでない場合、この関数は常に偽を返します。 classinfo が型オブジェクトのタプル (あるいは再帰的に複数のタプル) の場合、 object がそれらのいずれかのインスタンスであれば真を返します。 classinfo が型や型からなるタプル、あるいは複数のタプルのいずれでもない場合、
TypeError
例外が送出されます。
-
issubclass
(class, classinfo)¶ class が classinfo の (直接または間接的な、あるいは virtual) サブクラスである場合に真を返します。クラスはそれ自身のサブクラスとみなされます。 classinfo はクラスオブジェクトからなるタプルでもよく、この場合には classinfo のすべてのエントリが調べられます。その他の場合では、例外
TypeError
が送出されます。
-
iter
(object[, sentinel])¶ イテレータ (iterator) オブジェクトを返します。 第二引数があるかどうかで、第一引数の解釈は大きく異なります。 第二引数がない場合、 object は反復プロトコル (
__iter__()
メソッド) か、シーケンスプロトコル (引数が0
から開始する__getitem__()
メソッド) をサポートする集合オブジェクトでなければなりません。これらのプロトコルが両方ともサポートされていない場合、TypeError
が送出されます。 第二引数 sentinel が与えられているなら、 object は呼び出し可能オブジェクトでなければなりません。この場合に生成されるイテレータは、__next__()
を呼ぶ毎に object を引数無しで呼び出します。返された値が sentinel と等しければ、StopIteration
が送出され、そうでなければ、戻り値がそのまま返されます。イテレータ型 も見てください。
iter()
の2つ目の形式の便利な使用法の一つは、ファイルの行を特定の行まで読み進めることです。以下の例ではreadline()
が空文字列を返すまでファイルを読み進めます:with open('mydata.txt') as fp: for line in iter(fp.readline, ''): process_line(line)
-
len
(s)¶ オブジェクトの長さ (要素の数) を返します。引数はシーケンス (文字列、バイト列、タプル、リスト、range 等) かコレクション (辞書、集合、凍結集合等) です。
-
class
list
([iterable]) list
は、実際には関数ではなくミュータブルなシーケンス型で、 リスト型 (list) と シーケンス型 --- list, tuple, range にドキュメント化されています。
-
locals
()¶ 現在のローカルシンボルテーブルを表す辞書を更新して返します。関数ブロックで
locals()
を呼び出した場合自由変数が返されます、クラスブロックでは返されません。注釈
この辞書の内容は変更してはいけません; 変更しても、インタプリタが使うローカル変数や自由変数の値には影響しません。
-
map
(function, iterable, ...)¶ function を、結果を返しながら iterable の全ての要素に適用するイテレータを返します。追加の iterable 引数が渡されたなら、 function はその数だけの引数を取らなければならず、全てのイテラブルから並行して取られた要素に適用されます。複数のイテラブルが与えられたら、このイテレータはその中の最短のイテラブルが尽きた時点で止まります。関数の入力がすでに引数タプルに配置されている場合は、
itertools.starmap()
を参照してください。
-
max
(iterable, *[, key, default])¶ -
max
(arg1, arg2, *args[, key]) iterable の中で最大の要素、または2つ以上の引数の中で最大のものを返します。
位置引数が1つだけ与えられた場合、それはは空でない iterable でなくてはいけません。その iterable の最大の要素が返されます。2 つ以上のキーワード無しの位置引数が与えられた場合、その位置引数の中で最大のものが返されます。
任意のキーワード専用引数が 2 つあります。 key 引数は引数を 1 つ取る順序関数 (
list.sort()
のもののように) を指定します。 default 引数は与えられたイテラブルが空の場合に返すオブジェクトを指定します。 イテラブルが空で default が与えれれていない場合ValueError
が送出されます。最大の要素が複数あるとき、この関数はそのうち最初に現れたものを返します。これは、
sorted(iterable, key=keyfunc, reverse=True)[0]
やheapq.nlargest(1, iterable, key=keyfunc)
のような、他のソート安定性を維持するツールと両立します。バージョン 3.4 で追加: default キーワード専用引数。
-
memoryview
(obj) 与えられたオブジェクトから作られた "メモリビュー" オブジェクトを返します。詳しくは メモリビュー を参照してください。
-
min
(iterable, *[, key, default])¶ -
min
(arg1, arg2, *args[, key]) iterable の中で最小の要素、または2つ以上の引数の中で最小のものを返します。
位置引数が1つだけ与えられた場合、それはは空でない iterable でなくてはいけません。その iterable の最小の要素が返されます。2 つ以上のキーワード無しの位置引数が与えられた場合、その位置引数の中で最小のものが返されます。
任意のキーワード専用引数が 2 つあります。 key 引数は引数を 1 つ取る順序関数 (
list.sort()
のもののように) を指定します。 default 引数は与えられたイテラブルが空の場合に返すオブジェクトを指定します。 イテラブルが空で default が与えれれていない場合ValueError
が送出されます。最小の要素が複数あるとき、この関数はそのうち最初に現れたものを返します。これは、
sorted(iterable, key=keyfunc)[0]
やheapq.nsmallest(1, iterable, key=keyfunc)
のような、他のソート安定性を維持するツールと両立します。バージョン 3.4 で追加: default キーワード専用引数。
-
next
(iterator[, default])¶ iterator の
__next__()
メソッドを呼び出すことにより、次の要素を取得します。イテレータが尽きている場合、 default が与えられていればそれが返され、そうでなければStopIteration
が送出されます。
-
class
object
¶ 特徴を持たない新しいオブジェクトを返します。
object
は全てのクラスの基底クラスです。これは、 Python のクラスの全てのインスタンスに共通のメソッド群を持ちます。この関数はいかなる引数も受け付けません。
-
oct
(x)¶ Convert an integer number to an octal string. The result is a valid Python expression. If x is not a Python
int
object, it has to define an__index__()
method that returns an integer.
-
open
(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)¶ file を開き、対応する ファイルオブジェクト を返します。ファイルを開くことができなければ、
OSError
が送出されます。file is either a string or bytes object giving the pathname (absolute or relative to the current working directory) of the file to be opened or an integer file descriptor of the file to be wrapped. (If a file descriptor is given, it is closed when the returned I/O object is closed, unless closefd is set to
False
.)mode はオプションの文字列で、ファイルが開かれるモードを指定します。デフォルトは
'r'
で、読み込み用にテキストモードで開くという意味です。その他のよく使われる値は、書き込み (ファイルがすでに存在する場合はそのファイルを切り詰めます) 用の'w'
、排他的な生成用の'x'
、追記用の'a'
です (いくつかの Unix システムでは、全て の書き込みが現在のファイルシーク位置に関係なくファイルの末尾に追加されます)。テキストモードでは、encoding が指定されていない場合に使われるエンコーディングはプラットフォームに依存します:locale.getpreferredencoding(False)
を使って現在のロケールエンコーディングを取得します。(rawバイト列の読み書きには、バイナリモードを使い、encoding は未指定のままとします) 指定可能なモードは次の表の通りです。文字 意味 'r'
読み込み用に開く (デフォルト) 'w'
書き込み用に開き、まずファイルを切り詰める 'x'
排他的な生成に開き、ファイルが存在する場合は失敗する 'a'
書き込み用に開き、ファイルが存在する場合は末尾に追記する 'b'
バイナリモード 't'
テキストモード (デフォルト) '+'
ディスクファイルを更新用に開く (読み込み/書き込み) 'U'
ユニバーサル改行 モード (非推奨) デフォルトのモードは
'r'
(開いてテキストの読み込み、'rt'
と同義) です。バイナリの読み書きアクセスについては、モード'w+b'
はファイルを開いて 0 バイトに切り詰めます。'r+b'
はファイルを切り詰めずに開きます。概要 で触れられているように、Python はバイナリとテキストの I/O を区別します。(mode 引数に
'b'
を含めて) バイナリモードで開かれたファイルは、内容をいかなるデコーディングもせずにbytes
オブジェクトとして返します。(デフォルトや、 mode 引数に't'
が含まれたときの) テキストモードでは、ファイルの内容はstr
として返され、バイト列はまず、プラットフォーム依存のエンコーディングか、encoding が指定された場合は指定されたエンコーディングを使ってデコードされます。注釈
Python は、下層のオペレーティングシステムがテキストファイルをどう認識するかには依存しません; すべての処理は Python 自身で行われ、よってプラットフォーム非依存です。
buffering はオプションの整数で、バッファリングの方針を設定するのに使われます。バッファリングを無効にする (バイナリモードでのみ有効) には 0、行単位バッファリング (テキストモードでのみ有効) には 1、固定値のチャンクバッファの大きさをバイト単位で指定するには 1 以上の整数を渡してください。buffering 引数が与えられていないとき、デフォルトのバッファリング方針は以下のように動作します:
- バイナリファイルは固定サイズのチャンクでバッファリングされます。バッファサイズは、下層のデバイスの「ブロックサイズ」を決定するヒューリスティックを用いて選択され、それが不可能な場合は代わりに
io.DEFAULT_BUFFER_SIZE
が使われます。多くのシステムでは、典型的なバッファサイズは 4096 か 8192 バイト長になるでしょう。 - 「対話的な」テキストファイル (
isatty()
がTrue
を返すファイル) は行バッファリングを使用します。 その他のテキストファイルは、上で説明したバイナリファイル用の方針を使用します。
encoding はファイルのエンコードやデコードに使われる text encoding の名前です。このオプションはテキストモードでのみ使用してください。デフォルトエンコーディングはプラットフォーム依存 (
locale.getpreferredencoding()
が返すもの) ですが、Pythonでサポートされているエンコーディングはどれでも使えます。詳しくはcodecs
モジュール内のサポートしているエンコーディングのリストを参照してください。errors はオプションの文字列で、エンコードやデコードでのエラーをどのように扱うかを指定するものです。バイナリモードでは使用できません。様々な標準のエラーハンドラが使用可能です (エラーハンドラ に列記されています) が、
codecs.register_error()
に登録されているエラー処理の名前も使用可能です。標準のエラーハンドラの名前には、以下のようなものがあります:'strict'
はエンコーディングエラーがあると例外ValueError
を発生させます。デフォルト値であるNone
も同じ効果です。'ignore'
はエラーを無視します。エンコーディングエラーを無視することで、データが失われる可能性があることに注意してください。'replace'
は、不正な形式のデータが存在した場所に('?'
のような) 置換マーカーを挿入します。'surrogateescape'
は正しくないバイト列を、Unicode の Private Use Area (私用領域) にある U+DC80 から U+DCFF のコードポイントで示します。データを書き込む際にsurrogateescape
エラーハンドラが使われると、これらの私用コードポイントは元と同じバイト列に変換されます。これはエンコーディングが不明なファイルを処理するのに便利です。'xmlcharrefreplace'
はファイルへの書き込み時のみサポートされます。そのエンコーディングでサポートされない文字は、&#nnn;
形式の適切な XML 文字参照で置換されます。'backslashreplace'
は不正なデータを Python のバックスラッシュ付きのエスケープシーケンスで置換します。'namereplace'
(書き込み時のみサポートされています) はサポートされていない文字を\N{...}
エスケープシーケンスで置換します。
newline は universal newlines モードの動作を制御します (テキストモードでのみ動作します)。
None
,''
,'\n'
,'\r'
,'\r\n'
のいずれかです。これは以下のように動作します:- ストリームからの入力の読み込み時、newline が
None
の場合、ユニバーサル改行モードが有効になります。入力中の行は'\n'
,'\r'
, または'\r\n'
で終わり、呼び出し元に返される前に'\n'
に変換されます。''
の場合、ユニバーサル改行モードは有効になりますが、行末は変換されずに呼び出し元に返されます。その他の正当な値の場合、入力行は与えられた文字列でのみ終わり、行末は変換されずに呼び出し元に返されます。 - ストリームへの出力の書き込み時、newline が
None
の場合、全ての'\n'
文字はシステムのデフォルトの行セパレータos.linesep
に変換されます。 newline が''
または'\n'
の場合は変換されません。newline がその他の正当な値の場合、全ての'\n'
文字は与えられた文字列に変換されます。
closefd が
False
で、ファイル名ではなくてファイル記述子が与えられた場合、下層のファイル記述子はファイルが閉じられた後も開いたままとなります。 ファイル名が与えられた場合、closefd はTrue
(デフォルト値) でなければなりません。 そうでない場合エラーが送出されます。呼び出し可能オブジェクトを opener として与えることで、カスタムのオープナーが使えます。そしてファイルオブジェクトの下層のファイル記述子は、opener を (file, flags) で呼び出して得られます。opener は開いたファイル記述子を返さなければなりません。 (
os.open
を opener として渡すと、None
を渡したのと同様の機能になります)。新たに作成されたファイルは 継承不可 です。
次の例は
os.open()
関数の dir_fd 引数を使い、与えられたディレクトリからの相対パスで指定されたファイルを開きます:>>> import os >>> dir_fd = os.open('somedir', os.O_RDONLY) >>> def opener(path, flags): ... return os.open(path, flags, dir_fd=dir_fd) ... >>> with open('spamspam.txt', 'w', opener=opener) as f: ... print('This will be written to somedir/spamspam.txt', file=f) ... >>> os.close(dir_fd) # don't leak a file descriptor
open()
関数が返す file object の型はモードに依存します。open()
をファイルをテキストモード ('w'
,'r'
,'wt'
,'rt'
, など) で開くのに使ったときはio.TextIOBase
(特にio.TextIOWrapper
) のサブクラスを返します。 ファイルをバッファリング付きのバイナリモードで開くのに使ったときはio.BufferedIOBase
のサブクラスを返します。 実際のクラスは様々です。 読み込みバイナリモードではio.BufferedReader
を返します。 書き込みバイナリモードや追記バイナリモードではio.BufferedWriter
を返します。 読み書きモードではio.BufferedRandom
を返します。 バッファリングが無効なときはrawストリーム、すなわちio.RawIOBase
のサブクラスであるio.FileIO
を返します。fileinput
、(open()
が宣言された場所である)io
、os
、os.path
、tempfile
、shutil
などの、ファイル操作モジュールも参照してください。バージョン 3.3 で変更: The opener parameter was added. The
'x'
mode was added.IOError
used to be raised, it is now an alias ofOSError
.FileExistsError
is now raised if the file opened in exclusive creation mode ('x'
) already exists.バージョン 3.4 で変更: ファイルが継承不可になりました。
Deprecated since version 3.4, will be removed in version 4.0:
'U'
モード。バージョン 3.5 で変更: システムコールが中断されシグナルハンドラが例外を送出しなかった場合、この関数は
InterruptedError
例外を送出する代わりにシステムコールを再試行するようになりました (論拠については PEP 475 を参照してください)。バージョン 3.5 で変更:
'namereplace'
エラーハンドラが追加されました。- バイナリファイルは固定サイズのチャンクでバッファリングされます。バッファサイズは、下層のデバイスの「ブロックサイズ」を決定するヒューリスティックを用いて選択され、それが不可能な場合は代わりに
-
ord
(c)¶ 1 文字の Unicode 文字を表す文字列に対し、その文字の Unicode コードポイントを表す整数を返します。例えば、
ord('a')
は整数97
を返し、ord('€')
(ユーロ記号) は8364
を返します。これはchr()
の逆です。
-
pow
(x, y[, z])¶ x の y 乗を返します; z があれば、x の y 乗に対する z の剰余を返します (
pow(x, y) % z
より効率よく計算されます)。二引数の形式pow(x, y)
は、冪乗演算子を使ったx**y
と等価です。引数は数値型でなくてはなりません。型混合の場合、二項算術演算における型強制規則が適用されます。
int
被演算子に対しては、第二引数が負でない限り、結果は (型強制後の) 被演算子と同じ型になります; 負の場合、全ての引数は浮動小数点に変換され、浮動小数点の結果が返されます。例えば、10**2
は100
を返しますが、10**-2
は0.01
を返します。第二引数が負の場合、第三引数は省略しなければなりません。 z がある場合、 x および y は整数型でなければならず、 y は非負でなくてはなりません。
-
print
(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)¶ objects を sep で区切りながらテキストストリーム file に表示し、最後に end を表示します。sep 、 end 、 file 、 flush を与える場合、キーワード引数として与える必要があります。
キーワードなしの引数はすべて、
str()
がするように文字列に変換され、 sep で区切られながらストリームに書き出され、最後に end が続きます。 sep と end の両方とも、文字列でなければなりません。これらをNone
にすると、デフォルトの値が使われます。 objects が与えられなければ、print()
は end だけを書き出します。file 引数は、
write(string)
メソッドを持つオブジェクトでなければなりません。指定されないか、None
である場合、sys.stdout
が使われます。表示される引数は全てテキスト文字列に変換されますから、print()
はバイナリモードファイルオブジェクトには使用できません。代わりにfile.write(...)
を使ってください。出力がバッファ化されるかどうかは通常 file で決まりますが、flush キーワード引数が真ならストリームは強制的にフラッシュされます。
バージョン 3.3 で変更: キーワード引数 flush が追加されました。
-
class
property
(fget=None, fset=None, fdel=None, doc=None)¶ property 属性を返します。
fget は属性値を取得するための関数です。fset は属性値を設定するための関数です。fdel は属性値を削除するための関数です。doc は属性の docstring を作成します。
典型的な使用法は、属性
x
の処理の定義です:class C: def __init__(self): self._x = None def getx(self): return self._x def setx(self, value): self._x = value def delx(self): del self._x x = property(getx, setx, delx, "I'm the 'x' property.")
c が C のインスタンスならば、
c.x
は getter を呼び出し、c.x = value
は setter を、del c.x
は deleter を呼び出します。doc は、与えられれば property 属性のドキュメント文字列になります。与えられなければ、 property は fget のドキュメント文字列(もしあれば)をコピーします。そのため、
property()
をデコレータ (decorator) として使えば、読み出し専用 property を作るのは容易です:class Parrot: def __init__(self): self._voltage = 100000 @property def voltage(self): """Get the current voltage.""" return self._voltage
@property
デコレータはvoltage()
を同じ名前のまま 読み出し専用属性の "getter" にし、voltage のドキュメント文字列を "Get the current voltage." に設定します。property オブジェクトは
getter
,setter
,deleter
メソッドを持っています。これらのメソッドをデコレータとして使うと、対応するアクセサ関数がデコレートされた関数に設定された、 property のコピーを作成できます。これを一番分かりやすく説明する例があります:class C: def __init__(self): self._x = None @property def x(self): """I'm the 'x' property.""" return self._x @x.setter def x(self, value): self._x = value @x.deleter def x(self): del self._x
このコードは最初の例と等価です。追加の関数には、必ず元の property と同じ名前 (この例では
x
) を与えて下さい。返される property オブジェクトも、コンストラクタの引数に対応した
fget
,fset
, およびfdel
属性を持ちます。バージョン 3.5 で変更: 属性オブジェクトのドックストリングが書き込み可能になりました。
-
range
(stop) -
range
(start, stop[, step]) range
は、実際には関数ではなくイミュータブルなシーケンス型で、 range と シーケンス型 --- list, tuple, range にドキュメント化されています。
-
repr
(object)¶ オブジェクトの印字可能な表現を含む文字列を返します。この関数は多くの型について、
eval()
に渡されたときと同じ値を持つようなオブジェクトを表す文字列を生成しようとします。そうでない場合は、山括弧に囲まれたオブジェクトの型の名前と追加の情報 (大抵の場合はオブジェクトの名前とアドレスを含みます) を返します。クラスは、__repr__()
メソッドを定義することで、この関数によりそのクラスのインスタンスが返すものを制御することができます。
-
reversed
(seq)¶ 要素を逆順に取り出すイテレータ (reverse iterator) を返します。 seq は
__reversed__()
メソッドを持つか、シーケンス型プロトコル (__len__()
メソッド、および、0
以上の整数を引数とする__getitem__()
メソッド) をサポートするオブジェクトでなければなりません。
-
round
(number[, ndigits])¶ number の小数部を ndigists 桁に丸めた値を返します。ndigits が省略されたり、
None
だった場合、入力値に最も近い整数を返します。For the built-in types supporting
round()
, values are rounded to the closest multiple of 10 to the power minus ndigits; if two multiples are equally close, rounding is done toward the even choice (so, for example, bothround(0.5)
andround(-0.5)
are0
, andround(1.5)
is2
). Any integer value is valid for ndigits (positive, zero, or negative). The return value is an integer if called with one argument, otherwise of the same type as number.For a general Python object
number
,round(number, ndigits)
delegates tonumber.__round__(ndigits)
.注釈
浮動小数点数に対する
round()
の振る舞いは意外なものかもしれません: 例えば、round(2.675, 2)
は予想通りの2.68
ではなく2.67
を与えます。これはバグではありません: これはほとんどの小数が浮動小数点数で正確に表せないことの結果です。詳しくは 浮動小数点演算、その問題と制限 を参照してください。
-
class
set
([iterable]) オプションで iterable の要素を持つ、新しい
set
オブジェクトを返します。set
は組み込みクラスです。このクラスについて詳しい情報はset
や set(集合)型 --- set, frozenset を参照してください。他のコンテナについては
collections
モジュールや組み込みのfrozenset
、list
、tuple
、dict
クラスを参照してください。
-
setattr
(object, name, value)¶ getattr()
の相方です。引数はオブジェクト、文字列、それから任意の値です。文字列は既存の属性または新たな属性の名前にできます。この関数は指定したオブジェクトが許せば、値を属性に関連付けます。例えば、setattr(x, 'foobar', 123)
はx.foobar = 123
と等価です。
-
class
slice
(stop)¶ -
class
slice
(start, stop[, step]) range(start, stop, step)
で指定されるインデクスの集合を表す、スライス (slice) オブジェクトを返します。引数 start および step はデフォルトではNone
です。スライスオブジェクトは読み出し専用の属性start
、stop
およびstep
を持ち、これらは単に引数で使われた 値 (またはデフォルト値) を返します。これらの値には、その他のはっきりと した機能はありません。しかしながら、これらの値は Numerical Python および、その他のサードパーティによる拡張で利用されています。スライスオブジェクトは拡張されたインデクス指定構文が使われる際にも生成されます。例えばa[start:stop:step]
やa[start:stop, i]
です。この関数の代替となるイテレータを返す関数、itertools.islice()
も参照してください。
-
sorted
(iterable[, key][, reverse])¶ iterable の要素を並べ替えた新たなリストを返します。
2 つのオプション引数があり、これらはキーワード引数として指定されなければなりません。
key specifies a function of one argument that is used to extract a comparison key from each list element:
key=str.lower
. The default value isNone
(compare the elements directly).reverse は真偽値です。
True
がセットされた場合、リストの要素は個々の比較が反転したものとして並び替えられます。旧式の cmp 関数を key 関数に変換するには
functools.cmp_to_key()
を使用してください。組み込みの
sort()
関数は安定なことが保証されています。同等な要素の相対順序を変更しないことが保証されていれば、ソートは安定です。これは複数のパスでソートを行なうのに役立ちます(例えば部署でソートしてから給与の等級でソートする場合)。ソートの例と簡単なチュートリアルは ソート HOW TO を参照して下さい。
-
staticmethod
(function)¶ Return a static method for function.
静的メソッドは暗黙の第一引数を受け取りません。静的メソッドを宣言するには、このイディオムを使ってください:
class C: @staticmethod def f(arg1, arg2, ...): ...
@staticmethod
は関数デコレータ (decorator) 形式です。詳しくは 関数定義 の関数定義の説明を参照してください。このメソッドはクラスで呼び出すこと (例えば
C.f()
) も、インスタンスとして呼び出すこと (例えばC().f()
) もできます。インスタンスはそのクラスが何であるかを除いて無視されます。Python における静的メソッドは Java や C++ における静的メソッドと類似しています。クラスコンストラクタの代替を生成するのに役立つ変種、
classmethod()
も参照してください。静的メソッドについて詳しくは、 標準型の階層 の標準型階層についてのドキュメントを繙いてください。
-
class
str
(object='') -
class
str
(object=b'', encoding='utf-8', errors='strict') object の
str
版を返します。詳細はstr()
を参照してください。str
は組み込みの文字列 クラス です。文字列に関する一般的な情報は、テキストシーケンス型 --- str を参照してください。
-
sum
(iterable[, start])¶ start と iterable の要素を左から右へ合計し、総和を返します。 start はデフォルトで
0
です。 iterable の要素は通常は数値で、start の値は文字列であってはなりません。使う場面によっては、
sum()
よりもいい選択肢があります。文字列からなるシーケンスを結合する高速かつ望ましい方法は''.join(sequence)
を呼ぶことです。浮動小数点数値を拡張された精度で加算するには、math.fsum()
を参照してください。一連のイテラブルを連結するには、itertools.chain()
の使用を考えてください。
-
super
([type[, object-or-type]])¶ メソッドの呼び出しを type の親または兄弟クラスに委譲するプロキシオブジェクトを返します。これはクラスの中でオーバーライドされた継承メソッドにアクセスするのに便利です。探索の順序は、 type 自身が飛ばされるのをのぞいて
getattr()
で使われるのと同じです。type の
__mro__
属性は、getattr()
とsuper()
の 両方で使われる、メソッド解決の探索順序を列記します。 この属性は動的で、継承の階層構造が更新されれば、随時変化します。第 2 引数が省かれたなら、返されるスーパーオブジェクトは束縛されません。第 2 引数がオブジェクトであれば、
isinstance(obj, type)
は真でなければなりません。第 2 引数が型であれば、issubclass(type2, type)
は真でなければなりません (これはクラスメソッドに役に立つでしょう)。super の典型的な用途は 2 つあります。第一に、単継承のクラス階層構造で super は名前を明示することなく親クラスを参照するのに使え、それゆえコードをメンテナンスしやすくなります。この用途は他のプログラミング言語で見られる super の用途によく似ています。
2 つ目の用途は、動的な実行環境下で協調的な多重継承をサポートすることです。この用途は Python に特有で、静的にコンパイルされる言語や、単継承のみをサポートする言語では見られないものです。この機能により、複数の基底クラスが同じメソッドを実装する "diamond diagram" を実装できます。このメソッドをあらゆる場合に同じ形式で呼び出せるようにするのが、良い設計です (理由は、呼び出しの順序が実行時に決定されること、呼び出しの順序がクラス階層の変更に対応すること、呼び出しの順序に実行時まで未知の兄弟クラスが含まれる場合があることです)。
両方の用途において、典型的なスーパークラスの呼び出しは次のようになります:
class C(B): def method(self, arg): super().method(arg) # This does the same thing as: # super(C, self).method(arg)
なお、
super()
はsuper().__getitem__(name)
のような明示的なドット表記属性探索の束縛処理の一部として実装されています。これは、__getattribute__()
メソッドを予測可能な順序でクラスを検索するように実装し、協調的な多重継承をサポートすることで実現されています。従って、super()
は文やsuper()[name]
のような演算子を使った暗黙の探索向けには定義されていません。また、
super()
の使用は引数無しの形式を除きメソッド内部に限定されないことにも注目して下さい。2引数の形式は、必要な要素を正確に指定するので、適当な参照を作ることができます。クラス定義中における引数無しの形式は、定義されているクラスを取り出すのに必要な詳細を、通常の方法で現在のインスタンスにアクセスするようにコンパイラが埋めるのではたらきます。super()
を用いて協調的なクラスを設計する方法の実践的な提案は、 guide to using super() を参照してください。
-
tuple
([iterable]) tuple
は、実際は関数ではなくイミュータブルなシーケンス型で、タプル型 (tuple) と シーケンス型 --- list, tuple, range にドキュメント化されています。
-
class
type
(object)¶ -
class
type
(name, bases, dict) 引数が1つだけの場合、object の型を返します。返り値は型オブジェクトで、一般に
object.__class__
によって返されるのと同じオブジェクトです。オブジェクトの型の判定には、
isinstance()
組み込み関数を使うことが推奨されます。これはサブクラスを考慮するからです。引数が 3 つの場合、新しい型オブジェクトを返します。本質的には
class
文の動的な形式です。 name 文字列はクラス名で、__name__
属性になります。 bases タプルは基底クラスの羅列で、__bases__
属性になります。 dict 辞書はクラス本体の定義を含む名前空間で、標準の辞書にコピーされて__dict__
属性になります。たとえば、以下の二つの文は同じtype
オブジェクトを作ります:>>> class X: ... a = 1 ... >>> X = type('X', (object,), dict(a=1))
型オブジェクト も参照してください。
-
vars
([object])¶ モジュール、クラス、インスタンス、あるいはそれ以外の
__dict__
属性を持つオブジェクトの、__dict__
属性を返します。モジュールやインスタンスのようなオブジェクトは、更新可能な
__dict__
属性を持っています。ただし、それ以外のオブジェクトでは__dict__
属性への書き込みが制限されている場合があります。書き込みに制限がある例としては、辞書を直接更新されることを防ぐためにtypes.MappingProxyType
を使っているクラスがあります。引数がなければ、
vars()
はlocals()
のように振る舞います。ただし、辞書 locals への更新は無視されるため、辞書 locals は読み出し時のみ有用であることに注意してください。
-
zip
(*iterables)¶ それぞれのイテラブルから要素を集めたイテレータを作ります。
この関数はタプルのイテレータを返し、その i 番目のタプルは引数シーケンスまたはイテラブルそれぞれの i 番目の要素を含みます。このイテレータは、入力イテラブルの中で最短のものが尽きたときに止まります。単一のイテラブル引数が与えられたときは、1 要素のタプルからなるイテレータを返します。引数がなければ、空のイテレータを返します。次と等価です:
def zip(*iterables): # zip('ABCD', 'xy') --> Ax By sentinel = object() iterators = [iter(it) for it in iterables] while iterators: result = [] for it in iterators: elem = next(it, sentinel) if elem is sentinel: return result.append(elem) yield tuple(result)
イテラブルの左から右への評価順序は保証されています。そのため
zip(*[iter(s)]*n)
を使ってデータ系列を長さ n のグループにクラスタリングするイディオムが使えます。これは、各出力タプルがイテレータをn
回呼び出した結果となるよう、 同じ イテレータをn
回繰り返します。これは入力を長さ n のチャンクに分割する効果があります。zip()
は、長い方のイテラブルの終端にある対にならない値を考慮したい場合は、等しくない長さの入力に対して使うべきではありません。そのような値が重要な場合、代わりにitertools.zip_longest()
を使ってください。zip()
に続けて*
演算子を使うと、zip したリストを元に戻せます:>>> x = [1, 2, 3] >>> y = [4, 5, 6] >>> zipped = zip(x, y) >>> list(zipped) [(1, 4), (2, 5), (3, 6)] >>> x2, y2 = zip(*zip(x, y)) >>> x == list(x2) and y == list(y2) True
-
__import__
(name, globals=None, locals=None, fromlist=(), level=0)¶ 注釈
これは
importlib.import_module()
とは違い、日常の Python プログラミングでは必要ない高等な関数です。この関数は
import
文により呼び出されます。 (builtins
モジュールをインポートしてbuiltins.__import__
に代入することで) この関数を置き換えてimport
文のセマンティクスを変更することができますが、同様のことをするのに通常はインポートフック (PEP 302 参照) を利用する方が簡単で、かつデフォルトのインポート実装が使用されていることを仮定するコードとの間で問題が起きないので、このやり方は 強く 推奨されません。__import__()
を直接使用することも推奨されず、importlib.import_module()
の方が好まれます。この関数は、モジュール name をインポートし、 globals と locals が与えられれば、パッケージのコンテキストで名前をどう解釈するか決定するのに使います。 fromlist は name で与えられるモジュールからインポートされるべきオブジェクトまたはサブモジュールの名前を与ます。標準の実装では locals 引数はまったく使われず、 globals は
import
文のパッケージコンテキストを決定するためにのみ使われます。level は絶対と相対どちらのインポートを使うかを指定します。
0
(デフォルト) は絶対インポートのみ実行します。正の level の値は、__import__()
を呼び出したディレクトリから検索対象となる親ディレクトリの数を示します (詳細は PEP 328 を参照してください)。name 変数が
package.module
形式であるとき、通常は、name で指名されたモジュール ではなく、最上位のパッケージ (最初のドットまでの名前) が返されます。しかしながら、空でない fromlist 引数が与えられると、 name で指名されたモジュールが返されます。例えば、文
import spam
は、以下のコードのようなバイトコードに帰結します:spam = __import__('spam', globals(), locals(), [], 0)
文
import spam.ham
は、この呼び出しになります:spam = __import__('spam.ham', globals(), locals(), [], 0)
ここで
__import__()
がどのように最上位モジュールを返しているかに注意して下さい。import
文により名前が束縛されたオブジェクトになっています。一方で、文
from spam.ham import eggs, sausage as saus
は、以下となります_temp = __import__('spam.ham', globals(), locals(), ['eggs', 'sausage'], 0) eggs = _temp.eggs saus = _temp.sausage
ここで、
__import__()
からspam.ham
モジュールが返されます。このオブジェクトから、インポートされる名前が取り出され、それぞれの名前として代入されます。単純に名前からモジュール (パッケージの範囲内であるかも知れません) をインポートしたいなら、
importlib.import_module()
を使ってください。バージョン 3.3 で変更: 負の level の値はサポートされなくなりました (デフォルト値の 0 に変更されます)。
脚注
[1] | なお、パーサは Unix スタイルの行末の記法しか受け付けません。コードをファイルから読んでいるなら、必ず、改行変換モードで Windows や Mac スタイルの改行を変換してください。 |