[python] Python에서 람다를 이해하고이를 사용하여 여러 인수 전달

람다에서 찾을 수있는 모든 것을 읽은 후에도 내가 원하는대로하는 방법을 이해하지 못합니다.

모두가 예제를 사용합니다.

lambda x, y : x + y

왜 상태로 둘 필요합니까 xy전과 :? 또한 여러 인수를 반환하는 방법은 무엇입니까?

예를 들면 :

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.bindDemosthenex에서 답변해야합니다.


답변

bind는 항상 이벤트 매개 변수를 보내려고합니다. 시험:

self.entry_1.bind("<Return>", lambda event: self.calculate(self.buttonOut_1.grid_info(), 1))

매개 변수를 승인하고 사용하지 않습니다.


답변

왜 상태로 둘 필요합니까 xy전과 :?

그것은 함수 정의이고 함수가 어떤 매개 변수를 어떤 순서로 받아들이는지 알아야하기 때문입니다. 표현식을보고 변수 이름을 사용할 수는 없습니다. 그 이름 중 일부는 기존 로컬 또는 전역 변수 값을 사용하고 싶을 수도 있고 그렇게하더라도 순서를 알 수 없기 때문입니다. 그들을 얻을 것으로 예상해야합니다.

오류 메시지는 Tk가 하나의 인수로 람다를 호출하는 반면 람다는 인수를 허용하지 않도록 작성되었음을 의미합니다. 인수가 필요하지 않으면 인수를 받아들이고 사용하지 마십시오. ( Demosthenex에는 코드 가 있습니다. 게시했을 수 있지만 맞았습니다.)


답변

왜 ‘:’앞에 ‘x’와 ‘y’를 모두 표시해야합니까?

실제로 어떤 상황에서는 (하나의 인수 만있는 경우) “:”앞에 x와 y를 넣지 마십시오.

>>> flist = []
>>> for i in range(3):
...     flist.append(lambda : i)

하지만 람다의 i는 이름으로 묶일 것입니다.

>>> flist[0]()
2
>>> flist[2]()
2
>>>

당신이 원하는 것과는 다릅니다.


답변