2012-12-14 57 views
1

首先解釋代碼會更容易解釋我的問題。如何取消字典初始化? python3.3

def initialize_function(num,instruction,emplacement1,emplacement2,current_pipeline): 
    function_mapping={ 
    "LOAD" : LOAD(num,emplacement1,emplacement2,current_pipeline), 
    "STORE" : STORE(num,emplacement1,emplacement2,current_pipeline), 
    "MOVE" : MOVE_IADD(num,emplacement1,emplacement2,current_pipeline), 
    "IADD" : MOVE_IADD(num,emplacement1,emplacement2,current_pipeline), 
    "FADD" : FADD(num,emplacement1,emplacement2,current_pipeline) 
    } 
    current_pipeline=function_mapping[instruction] 
    return(current_pipeline) 

initialize_function函數有一個參數instructioninstruction是一個相當於function_mapping詞典之一鍵的字符串。 所以當我做current_pipeline=function_mapping[instruction]它應該只執行instruction的值。但事實並非如此。實際上,function_mapping字典在查找關鍵字instruction之前被初始化,因此它會依次執行所有函數LOAD,STORE,MOVE,IADD,FADD。

我該怎麼辦?

預先感謝您:)

MFF

回答

4

由於參數所有的功能都是一樣的這應該工作:

def initialize_function(num,instruction,emplacement1,emplacement2,current_pipeline): 
    function_mapping={ 
    "LOAD" : LOAD, 
    "STORE" : STORE, 
    "MOVE" : MOVE_IADD, 
    "IADD" : MOVE_IADD, 
    "FADD" : FADD 
    } 
    current_pipeline=function_mapping[instruction](num,emplacement1,emplacement2,current_pipeline) 
    return(current_pipeline) 

說明:您的字典中的值將在運行時進行評估因爲你實際上正在調用這些函數。你想傳遞一個對它們的引用,因爲函數是python中的第一類對象,你可以做到這一點。

+0

我明白了!謝謝,它工作;) –