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


163

왜 작동하지 않습니까?

lambda: print "x"

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


1
docs.python.org/reference/expressions.html#lambda . "표현식"이라고하며 가능한 모든 표현식의 완전한 정의에 대한 링크입니다. 이것이 어떻게 "희소"입니까? 잘못되었거나 불완전한 것은 무엇입니까?
S.Lott

3
@Lott 나는 표현 / 진술이 무엇이며 인쇄가 어디에 있는지에 대해 오해했습니다. 이제 의미가 있습니다
Anycorn

답변:


187

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

5
이제 기능을 만드는 것이 왜 그렇게 큰지 알았습니다. print를 기본 크워 그로 사용하고 싶었고 이것을 고쳤습니다. 감사.
토마스 디냥

1
from __future__ import print_function코드의 시작 부분에 있어야 하는지 알 수 있습니까? thx
Ben

우리가 여기 쓴 내용의 지문은 어디서 볼 수 있습니까?
Sk. Irfan

Ben의 의견에 동의합니다.이 수입품을받지 못했습니다. 파이썬 (2 또는 3)에는 print()내장 메소드가 있습니다.
ivanleoncz

27

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

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

완벽하게 작동합니다.


3
추가 참고 사항으로 위의 미래를 사용하십시오. 사용할 수없는 곳에서만 사용하십시오. 현재 버전이 매우 오래된 버전입니다.
Danny Staple

24

당신이 쓴 것은

def anon():
    return print "x"

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

lambda: print('hi')

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


3
또한 from __future__ import print_functionpy2.x에서이를 가능하게합니다
tzaman

5
또는 대안으로lambda: sys.stdout.write('hi')
fmark

@fmark : 2.x에서는 그렇게 간단하지 않다는 점을 제외하고 : sys.stdout.softspace를 처리하고 (적어도) 개행을 작성해야합니다.
Fred Nurk

11

람다의 본문은 값을 반환하는 표현식이어야합니다. 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

11

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

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

def printf(text):
   print text

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

lambda: printf("Testing")

더 유연하게 :def printf(fmt, *args): print(fmt % args)
IvyMike

4

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

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

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

lambda: 4

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

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

3

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


감사합니다, 표현 대 진술의 정의에 대해 확신하지 못했습니다. 이제 말이됩니다
Anycorn

2

여기 에 귀하의 질문에 대한 답변이 있습니다. print파이썬에서는 표현이 아닙니다.


1
불완전한 답변이지만 멋진 링크입니다.
Stephen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.