Python中查看函數參數有四種方式:
1. F(arg1,arg2,…)
這是函數的常見定義方式,可以定義任意數量的參數。參數之間使用逗號分隔。當呼叫這種類型的函數時,必須在函數名稱後的括號中提供相同數量的值(實際參數),且順序必須相同。換句話說,在這種調用方式中,形參和實參的數量必須一致,並且必須一一對應,即第一個形參對應第一個實參。例如:
程式碼如下:
def a(x,y):print x,y
呼叫函數,a(1,2)則x取1,y取2,形參與實參相對應,若a(1)或a(1,2,3)則會報錯。
2. F(arg1,arg2=value2,…)
這種方式就是第一種的改進版,提供了預設值,例如:
程式碼如下:
def a(x,y=3):print x,y
呼叫函數,a(1,2)同樣還是x取1,y取2,但是如果a(1),則不會報錯了,這個時候x還是1,y則為預設的3。上面這倆種方式,還可以更換參數位置,例如a(y=4,x=3)用這種形式也是可以的。
3. F(*arg1)
上面兩種方式是有多少個形參,就傳進去多少個實參,但有時候會不確定有多少個參數,則此時第三種方式就比較有用,它以一個*加上形參名的方式來表示這個函數的實參數不定,可能為0個也可能為n個。注意一點是,不管有多少個,在函數內部都被存放在以形參名為識別符的元組中。
程式碼如下:
def a(*x):print x
#>>> a(1,2,3)
(1, 2, 3)
>>> a(x=1,y=2,z=3)
Traceback (most recent call last):
File "", line 1, in TypeError: a() got an unexpected keyword argument 'x' 4. F(**arg1) 形參名前加兩個*表示,參數在函數內部將被存放在以在形式名為識別符的dictionary中,這時呼叫函數的方法則需要採用arg1=value1,arg2=value2這樣的形式。程式碼如下: def a(**x):print x >>> a(x=1,y=2,z=3) {'y': 2, 'x': 1, 'z': 3} #存放在字典中>>> a(1,2,3) #這種呼叫則報錯Traceback (most recent call last): File "", line 1, in TypeError: a() takes exactly 0 arguments (3 given)
在開發中我們可以藉助相關外掛程式或使用Python內建函數"help()」來查看某個函數的參數說明,以查看內建函數sorted()為例:
#函數參數包含:必選參數、預設參數、可選參數、關鍵字參數。
1、預設參數:放在必選參數之後,計算x平方的函數:
#這樣的話每次計算不同冪函數都要重寫函數,非常麻煩,可使用以下程式碼計算:
#預設參數最大好處就是降低呼叫函數的難度。
2、可變參數:就是傳入的參數個數是可變的,可以是1個、2個到任一個,還可以是0個,在參數前面加上*就是可變參數。在函數內部,參數numbers接收得到的是一個tuple,當呼叫函數時,可以傳入任一個參數,包括0個參數:
#也可以類似可變參數,先組裝一個dict,然後,把該dict轉換成關鍵字參數傳進去:
#就是,建議轉貼
好吧, 我去別的地方看看
但是分。 。 。 。
VC自帶的Depends~
提個看參數個數的方法吧,不過無法判斷類型,除非你仔細追蹤每一句指令
PROC lpFunction = GetProcAddress(hModule,"fucntion name");_asm{jmp lpFunction ;從這裡追蹤進函數進去}
函數應該為(如果是C寫的stdcall)
(別執行,可能會出錯的,往下慢慢看得了)push ebpmov ebp,esp
sub esp,XXX (4的倍數)
add esp,XXX
mov esp,ebppop ebpret XXXX (也是四的倍數)
參數個數 = XXXX/4
以上是如何查看Python函數的參數訊息的詳細內容。更多資訊請關注PHP中文網其他相關文章!