pythonオブジェクトの概念
1113 ワード
pythonでは、オブジェクトは変数であり、オブジェクトは実際にポインタであり、データ構造を指し、データ構造には属性があり、方法がある.
変数の後ろには小数点が付いていて、小数点の後ろにはその属性や方法があり、カッコ付きは方法で、持たないのは属性です.
pythonでは、関数もオブジェクトであり、関数オブジェクトを変数に割り当てることができます.
pythonの@文法を見てみましょう.装飾器(decorator)と呼ばれています.
@logをnow()関数の定義に置くと、文、log(now)を実行することに相当しますが、これはどのように実行されますか?
1.オブジェクトnowをインバウンド関数log()とする
2.return wrapper文の実行
3.関数wrapper()を実行し、関数wrapper定義に基づいて、この関数が任意のタイプのパラメータを受け入れることがわかる.
3.1 print('call%s():'%func.)を実行name__)文、funcはメイン関数log(now)のパラメータnowを表すので、ここでオブジェクトを印刷します.
nowの属性name=now
3.2 func(*args,**kw)=now(*args,**kw)を実行します.yは現在パラメータが入っていないので、now()を実行します.
3.3実行関数now(),print('2015-3-25')
def now():
print('2015-3-25')
f = now
print(f.__name__)
print(f.c)
変数の後ろには小数点が付いていて、小数点の後ろにはその属性や方法があり、カッコ付きは方法で、持たないのは属性です.
pythonでは、関数もオブジェクトであり、関数オブジェクトを変数に割り当てることができます.
pythonの@文法を見てみましょう.装飾器(decorator)と呼ばれています.
def log(func):# , , , wrapper
def wrapper(*args, **kw):
print('call %s():' % func.__name__)
return func(*args, **kw)
return wrapper
@log
def now():
print('2015-3-25')
f = now()#call now():
#2015-3-25
@logをnow()関数の定義に置くと、文、log(now)を実行することに相当しますが、これはどのように実行されますか?
1.オブジェクトnowをインバウンド関数log()とする
2.return wrapper文の実行
3.関数wrapper()を実行し、関数wrapper定義に基づいて、この関数が任意のタイプのパラメータを受け入れることがわかる.
3.1 print('call%s():'%func.)を実行name__)文、funcはメイン関数log(now)のパラメータnowを表すので、ここでオブジェクトを印刷します.
nowの属性name=now
3.2 func(*args,**kw)=now(*args,**kw)を実行します.yは現在パラメータが入っていないので、now()を実行します.
3.3実行関数now(),print('2015-3-25')