Python.use(better) #OOP:式〔expression〕
‖記事一覧‖ Python.use(better)《Python3.1》
OOP:式〔expression〕
オブジェクト指向プログラミング〔OOP〕の基本概念の理解を深めます。
※ Python1.5 で作成した例題を、Python3.1 で再構成しました。
式を利用するということ
式を利用することの意義について考察します。
式は、任意のオブジェクトを参照する手段を提供します。式には、
- 関数呼び出し
- 演算子
- メソッド呼び出し
- クラス呼び出し
などがあります。
■ 関数オブジェクト
>>> id(len) 178776 >>> type(len)
関数も他のオブジェクトと同様に、識別性を持ちます。関数オブジェクト(id:178776)は、関数の名前と同じ変数 len によって束縛されます。
■ 関数呼び出し:リテラル引数
>>> id("ABC")
6370656
>>> len("ABC")
3
>>> id(_)
3483808
関数を呼び出すには(関数の名前と同じ)変数 len に演算子 () を適用します。ここでは、実引数に文字列オブジェクト "ABC" を指定します。すると、リターン値として、整数オブジェクト 3(id:3483808)が得られます。
■ 関数呼び出し:変数引数
>>> s = "ABC"; id(s)
6370656
>>> len(s)
3
>>> id(_)
3483808
ここでは、実引数に変数 s を指定します。すると、変数 s によって束縛される、文字列オブジェクト "ABC" を指定したのと同じ結果が得られます。つまり、変数の有無は、オブジェクト(整数、関数)が提供する機能(メソッド呼び出しの結果)に影響しません。変数の有無が影響するのは、オブジェクトが回収されずに、そこに存在し続けるかという点だけです。
■ 関数呼び出しの意義
関数呼び出しによって(そのリターン値として得られる)任意のオブジェクトを参照できます。関数呼び出しも、他の式と同様に、任意のオブジェクトを参照する手段として有効です。たとえば、整数オブジェクト 3 を表現する方法は様々です。ここでは、式 len("ABC") または len(s) によって、それを実現しているだけのことです。
■ 関数呼び出しの意義:lambda 式
>>> f = lambda e: len(e) >>> f("ABC") 3 >>> id(_) 3483808 >>> id(f) 19227896 >>> type(f)
@@@@@@@@@@@@@@@@@@@
変数による束縛
《tips》変数は、それによって束縛されるオブジェクトとは独立した概念です。そのため、対象となるオブジェクト(整数、関数、クラスなど)には依存しない、共通の操作が可能になります。
関数を定義するということ
lambda 式は、名前を持たない関数オブジェクトを参照する、直接的な手段を提供します。式は(lambda 式に限らず)リテラル表現に代えて、オブジェクトを参照する手段のひとつを提供します。例えば、
>>> id(7) 3483872 >>> id(3+4) 3483872リテラル表現 7 と式 3+4 とは、どちらも同じ「整数」オブジェクト 7(id:3483872)を参照します。このように、オブジェクトを参照(表現)するには、次の3つの手段があります。
- リテラル
- 変数
- 式
>>> n = 3 >>> id(n.__add__(4)) 3483872 >>> 3.__add__(4) # (x.x) ... too bad SyntaxError: invalid syntax (, line 1) >>> 3.0.__add__(4) 7.0
》こちらに移動中です《
↑TOP