第一種:參數按順序從第一個參數往后排#標准調用
# -*- coding: UTF-8 -*-
def normal_invoke(x, y): print "--normal_invoke:--"
print "x is %d" %x print "y is %d" %y
#標准調用
normal_invoke(1, 2)
運行結果:
--normal_invoke:-- x is 1 y is 2
第二種:#關鍵字調用
def keyword_invoke(x, y): print "--keyword_invoke--:" print "x is %d" % x print "y is %d" % y
#關鍵字調用 keyword_invoke(y=1, x=2)
注意:關鍵調用從哪開始的,從哪以后都必須使用關鍵字調用除了‘*’收集參數。不能寫成這樣的:keyword_invoke(y=1, 2),這樣就會報錯。
運行結果:
--keyword_invoke--: x is 2 y is 1
第三種:#非關鍵字可變長參數(tuple) def normal_tuple_invoke(x, y=2, *values):
print "--normal_tuple_invoke--" print "x is %d" % x print "y is %d" % y for value in values: print "tuple's value has", value
#非關鍵字可變長參數(tuple)
normal_tuple_invoke(1, 3, 'xyz', 123.4)
注意:收集參數 ‘*’當你參數不確定有多少是你可是使用它,他會把不確定的部分存在values元組中,當然這個元組名字要看‘*’后面跟的是啥了。
運行結果:
--normal_tuple_invoke-- x is 1 y is 3 tuple's value has xyz
tuple's value has 123.4
第四種:#關鍵字可變長參數(dict)
def keyword_dict_invoke(x, y=2, **value_dict): print "--keyword_dict_invoke--" print "x is %d" % x print "y is %d" % y for key in value_dict: print "key is ", key print "value is ", value_dict[key]
#關鍵字可變長參數(dict)
keyword_dict_invoke(y=1, x=2, arg2='def', arg1='put at the last')
注意:**value_dict 傳回來的參數以字典:key-value的形式存放,單招順序首先傳回來的是:key,其次是:value。
運行結果:
--keyword_dict_invoke-- x is 2 y is 1 key is arg1 value is put at the last key is arg2 value is def Process finished with exit code 0
第五中:還有一種是以整個函數為參數傳回來,目前我知道是裝飾器在使用
裝飾器實際上就是為了給某程序增添功能,但該程序已經上線或已經被使用,那么就不能大批量的修改源代碼,這樣是不科學的也是不現實的,因為就產生了裝飾器,使得其滿足:
- 不能修改被裝飾的函數的源代碼
- 不能修改被裝飾的函數的調用方式
- 滿足1、2的情況下給程序增添功能
那么根據需求,同時滿足了這三點原則,這才是我們的目的。因為,下面我們從解決這三點原則入手來理解裝飾器。
等等,我要在需求之前先說裝飾器的原則組成:
< 函數+實參高階函數+返回值高階函數+嵌套函數+語法糖 = 裝飾器 >
這個式子是貫穿裝飾器的靈魂所在!
improt time def test(): time.sleep(2) print("test is running!") def deco(func): start = time.time() func() #2
stop = time.time() print(stop-start) deco(test) #1
我們來看一下這段代碼,在#1處,我們把test當作實參傳遞給形參func,即func=test。注意,這里傳遞的是地址,也就是此時func也指向了之前test所定義的那個函數體,可以說在deco()內部,func就是test。在#2處,把函數名后面加上括號,就是對函數的調用(執行它)。因此,這段代碼運行結果是:
test is running! the run time is 3.0009405612945557
關於裝飾器我在另一篇文章中有詳細解釋!
---每天進步一點點!!!
