python学習の伝達関数
2886 ワード
Pythonでは、関数もオブジェクトです.だから関数は引用されることができて、パラメータとして関数に入ることができて(装飾器を考えてみて)、話は多くなくて、前の例.(例は『pythonコアプログラミング第2版』)例1.エイリアス呼び出しの使用
上記コードでは、
上記の例では、内層が関数の呼び出しを返すので、装飾器機能を実現した後に被装飾関数の呼び出しを完了することができ、内層が
上記の例では、
総じてpythonの関数は柔軟で、多くのテクニックがあります.
def foo():
print('in foo()')
bar = foo #
>>>bar()
in foo()
上記コードでは、
foo
をbar
に割り当て、このときbar
とfoo
は同じ関数オブジェクトを参照するので、bar()
の形式でfoo()
を呼び出すことができる.ここでは、foo
とfoo()
の違いに注意してください.前者は関数の参照であり、後者は関数の呼び出しであるため、装飾器にネストされた内部では関数の呼び出しが返され、外側では関数の参照が返されます.例2.装飾器の内外層の戻り値の違いdef dec(func):
def wrapper(*args,**kwargs):
do something...
return func(*args,**kwargs) # ,
return wrapper
上記の例では、内層が関数の呼び出しを返すので、装飾器機能を実現した後に被装飾関数の呼び出しを完了することができ、内層が
func
を返すと、被装飾関数は呼び出されない.本題に戻ると、関数はパラメータとして他の関数に呼び出すことができます:例3.関数を他の関数のパラメータとして使用def bar(argfunc):
argfunc()
>>>bar(foo)
in foo()
上記の例では、
foo()
関数の参照をパラメータとしてbar()
に入力し、foo()
の機能を実現することに成功した.実際の例を見てみましょう.例4.関数の転送と呼び出しdef convert(func,seq):
'conv. sequence of numbers to same type'
return [func(eachNum) for eachNum in seq]
myseq = (123,45.67,-6.2e8,999999999L)
print (convert(int,myseq)) # [123,45,-62000000,999999999]
print (convert(long,myseq)) # [123L,45L,-62000000L,999999999L]
print (convert(float,myseq)) # [123.0,45.67,-62000000.0,999999999.0]
総じてpythonの関数は柔軟で、多くのテクニックがあります.