[python] 람다에서 인쇄가되지 않는 이유는 무엇입니까?

왜 작동하지 않습니까?

lambda: print "x"

이것은 하나의 진술이 아니거나 다른 것입니까? 람다에서 허용되는 내용에 대한 문서가 조금 드문 것 같습니다 …



답변

lambda의 몸은되어야합니다 하나의 표현 . Python 2.x에서는 print문장입니다. 그러나, 파이썬 3에서, printA는 함수 (그리고 람다에서 작동하도록 기능 프로그램은 표현이다). 최신 Python 2.x를 사용하는 경우 역 호환 인쇄 기능을 사용할 수 있습니다.

In [1324]: from __future__ import print_function

In [1325]: f = lambda x: print(x)

In [1326]: f("HI")
HI


답변

간단한 스터 빙을 위해 이것을 사용하는 경우 다음을 사용합니다.

fn = lambda x: sys.stdout.write(str(x) + "\n")

완벽하게 작동합니다.


답변

당신이 쓴 것은

def anon():
    return print "x"

또한 SyntaxError가 발생합니다. 파이썬은 2.xx로 인쇄 할 값을 지정할 수 없습니다. python3에서는 말할 수 있습니다.

lambda: print('hi')

인쇄가 명령문 대신 함수로 변경 되었기 때문에 작동합니다.


답변

람다의 본문은 값을 반환하는 표현식이어야합니다. print, 진술이므로 아무것도 반환하지 않습니다 None. 마찬가지로, 결과를 print변수에 할당 할 수 없습니다 :

>>> x = print "hello"
  File "<stdin>", line 1
    x = print "hello"
            ^
SyntaxError: invalid syntax

할당은 명령문이므로 변수 할당을 람다에 넣을 수도 없습니다.

>>> lambda y: (x = y)
  File "<stdin>", line 1
    lambda y: (x = y)
                 ^
SyntaxError: invalid syntax


답변

이런 식으로 할 수 있습니다.

print 문을 함수로 변환하는 함수를 작성하십시오.

def printf(text):
   print text

그리고 그것을 인쇄하십시오 :

lambda: printf("Testing")


답변

Python 3.x를 사용하면 람다의 의미를 변경하지 않고 print CAN이 람다에서 작동합니다.

특별한 방법으로 사용하면 디버깅에 매우 편리합니다. 이 ‘늦은 대답’을 게시합니다. 왜냐하면 내가 자주 사용하는 실용적인 방법이기 때문입니다.

‘악기없는’람다는 다음과 같다고 가정하십시오.

lambda: 4

그런 다음 ‘악기’람다는 다음과 같습니다.

lambda: (print (3), 4) [1]


답변

람다의 몸은 하나의 표현 이어야한다 . print성명서이므로 안타깝게도