目前,我的代碼是這樣的:lambda函數和變量的作用域
for control in self.controls():
self.connect(control, SIGNAL('clicked()'), lambda: self.button(control.objectName()))
當我運行我的代碼,我lambda
函數需要control
是最後元素在我的元素列表,這是不我期望會發生什麼。
奇怪的是,當我手動運行lambda
每次循環,它工作正常,每個循環,但它像以前一樣仍然有同樣的問題到底:
for control in self.controls():
func = lambda: self.button(control.objectName())
func() # Prints the correct output
self.connect(control, SIGNAL('clicked()'), func) # When triggered, still breaks
我self.button()
功能平凡定義:
def button(self, name):
print name
我檢查了的control
和func
每次循環的唯一通過打印的id(control)
和id(func)
輸出,他們都返回唯一NUM別爾斯。除此之外,control.objectName()
是正確的對象名稱。
我有一種感覺,這是一個可變範圍問題,因爲我通常不會在我的代碼中經常使用lambda
。有人看到任何明顯的錯誤嗎?
[複製](http://stackoverflow.com/questions/938429/scope-of-python-lambda-functions-and-their-parameters) – Avaris
而作爲一個側面說明:考慮使用[新風格的信號/插槽](http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/new_style_signals_slots.html)。 – Avaris
@Avaris:在我發佈我的問題後,我切換了*正確*。不過,感謝您的鏈接,我不知道它有官方文檔。 – Blender