2016-01-21 111 views
-1

我在火車/航運模擬中得到了一段代碼,它給了我一些意想不到的結果。在我的代碼中,我將函數分配給lambda函數,將它們歸檔到堆棧中,然後彈出堆棧,依次完成每個函數。一些函數將更多的功能放在堆棧上。爲lambda分配函數分配調用函數,而不是指定的函數

我使用lambda表達式,所以當我將函數放在堆棧上時,它帶有我想要運行的參數。

這是我的問題。我有一個名爲TrainArrivesAtDock()的函數,它應該創建另一個lambda並將其推入堆棧。但是,我創建的lambda不包含我要求的函數,它保存着TrainArrivesAtDock()

下面是代碼:

event = lambda: TrainUnloadComplete(crew) 
insertEventAtCorrectTime(currentTime + trainQueue[0].remainingUnloadTime, event) 

但在我的IDE檢查事件變量,我看到這個:<function TrainArrivesAtDock.<locals>.<lambda> at 0x0287BB28>

顯然,這不是正確的實現,但它是我的錯還是翻譯的?我正在使用PyTools for VS2012,我認爲這可能是問題,但在IDLE中運行此程序會產生相同的結果。

回答

1

看起來您的代碼可能正常運行。考慮下面的例子:

def get_lambda(closure_var): 
    return lambda: closure_var 

string = "Hey!" 
foo = get_lambda(string) 
print(foo) 
print(foo()) 

隨着輸出:

<function get_lambda.<locals>.<lambda> at 0x7f6b90281bf8> 
Hey! 

似乎TrainArrivesAtDock.<locals>.<lambda>指的是lambda創建在,想必以便它可以評估所需的封閉的變量的範圍。

0

如果我運行Python 3下,如下代碼:

def main(): 
    x = lambda: print("hello") 
    print(x) 
    x() 

main() 

它打印:

<function main.<locals>.<lambda> at 0x7f39297012f0> 
hello 

其中x的打印打印的拉姆達的元信息 - 它不打印lambda的內容,但lambda定義在哪裏。

不知道爲什麼你的代碼不工作,但我懷疑你是在錯誤的軌道上。

-1

哇,我很蠢。就像上面的o_o註釋一樣,我的IDE給出的代碼片段指的是創建lambda的位置,而不是lambda本身。這是我的代碼中的錯誤,我誤解了IDE。

+0

這應該是對您的問題的評論(或者對其進行更新)。 –