람다에서 찾을 수있는 모든 것을 읽은 후에도 내가 원하는대로하는 방법을 이해하지 못합니다.
모두가 예제를 사용합니다.
lambda x, y : x + y
왜 상태로 둘 필요합니까 x
및 y
전과 :
? 또한 여러 인수를 반환하는 방법은 무엇입니까?
예를 들면 :
self.buttonAdd_1 = Button(self, text='+', command=lambda : self.calculate(self.buttonOut_1.grid_info(), 1))
이것은 잘 작동합니다. 그러나 다음 코드는 그렇지 않습니다.
self.entry_1.bind("<Return>", lambda : self.calculate(self.buttonOut_1.grid_info(), 1))
오류가 발생합니다.
TypeError : () 인수 없음 (1 개 제공)
답변
왜 ‘:’앞에 ‘x’와 ‘y’를 모두 표시해야합니까?
람다는 (개념적으로) 함수와 동일하기 때문에 인라인으로 작성되었습니다. 귀하의 예는
def f(x, y) : return x + y
같은 이름에 바인딩하지 않고 f
.
또한 여러 인수를 반환하는 방법은 무엇입니까?
함수와 같은 방식입니다. 바람직하게는 튜플을 반환합니다.
lambda x, y: (x+y, x-y)
아니면 목록이나 수업 등.
문제는 self.entry_1.bind
Demosthenex에서 답변해야합니다.
답변
bind는 항상 이벤트 매개 변수를 보내려고합니다. 시험:
self.entry_1.bind("<Return>", lambda event: self.calculate(self.buttonOut_1.grid_info(), 1))
매개 변수를 승인하고 사용하지 않습니다.
답변
왜 상태로 둘 필요합니까
x
및y
전과:
?
그것은 함수 정의이고 함수가 어떤 매개 변수를 어떤 순서로 받아들이는지 알아야하기 때문입니다. 표현식을보고 변수 이름을 사용할 수는 없습니다. 그 이름 중 일부는 기존 로컬 또는 전역 변수 값을 사용하고 싶을 수도 있고 그렇게하더라도 순서를 알 수 없기 때문입니다. 그들을 얻을 것으로 예상해야합니다.
오류 메시지는 Tk가 하나의 인수로 람다를 호출하는 반면 람다는 인수를 허용하지 않도록 작성되었음을 의미합니다. 인수가 필요하지 않으면 인수를 받아들이고 사용하지 마십시오. ( Demosthenex에는 코드 가 있습니다. 게시했을 수 있지만 맞았습니다.)
답변
왜 ‘:’앞에 ‘x’와 ‘y’를 모두 표시해야합니까?
실제로 어떤 상황에서는 (하나의 인수 만있는 경우) “:”앞에 x와 y를 넣지 마십시오.
>>> flist = []
>>> for i in range(3):
... flist.append(lambda : i)
하지만 람다의 i는 이름으로 묶일 것입니다.
>>> flist[0]()
2
>>> flist[2]()
2
>>>
당신이 원하는 것과는 다릅니다.