인쇄용 인라인 if 문을 작성하는 방법은 무엇입니까?


376

부울 변수가로 설정된 경우에만 물건을 인쇄해야합니다 True. 그래서 이것을 본 후에 간단한 예를 들어 보았습니다.

>>> a = 100
>>> b = True
>>> print a if b
  File "<stdin>", line 1
    print a if b
             ^
SyntaxError: invalid syntax  

내가 쓰는 경우에도 마찬가지입니다 print a if b==True.

내가 여기서 무엇을 놓치고 있습니까?



2
좋은 질문, 복잡한 답변 ... "다른 부분은 필수"입니다.

답변:


737

파이썬에는 후행 문장없습니다 .if

if파이썬 에는 두 가지 종류가 있습니다 :

  1. if 성명서:

    if condition: statement
    if condition:
        block
  2. if 표현 (파이썬 2.5에서 도입)

    expression_if_true if condition else expression_if_false

그리고 참고, 그 모두 print ab = a문입니다. a부분 만 표현입니다. 그래서 당신이 쓰는 경우

print a if b else 0

그 뜻은

print (a if b else 0)

당신이 쓸 때와 마찬가지로

x = a if b else 0

그 뜻은

x = (a if b else 0)

이제 else절이 없다면 무엇을 인쇄 / 할당 합니까? 인쇄 / 할당이 여전히 있습니다 .

그리고 거기에 있기를 원하지 않으면 if읽기가 어렵고 두 줄 변형을 피할 이유가 없지만 항상 한 줄에 일반 명령문을 작성할 수 있습니다 .


여러 줄 if condition: statement진술의 경우에는 효과가 없다고 생각합니다 .
Val

예, 그러나 예제에서 아래에 표시된 것처럼 부울 논리를 사용하면됩니다.
Eduardo

1
@JanHudec 파이썬에 후행 if이 없다면 왜 작동 print [i for i in range(10) if i%2]합니까? 나는 그들이 이해의 범위 밖에서 그것을 허용하고 싶습니다 ...
mbomb007

3
@ mbomb007, 이것은 후행 if 이 아닙니다 . 그것은 단순히 목록 (또는 생성기) 이해의 일부입니다. if 앞의 것은 진술이 아니며, 두 표현식 for사이에있는 표현식입니다 .
Jan Hudec

2
@AlexandervonWernherr, 맞습니다.
Jan Hudec

93

인라인 if-else EXPRESSION 은 항상 else 절을 ​​포함해야합니다. 예 :

a = 1 if b else 0

'a'변수 값을 변경하지 않고 그대로 유지하려면 이전 'a'값을 가정하십시오 (구문 요구에 따라 여전히 필요함).

a = 1 if b else a

이 코드 b가 False로 바뀌면 변경되지 않은 상태로 둡니다 .


1
오. 그러나 else 지점에서 아무 일도 일어나지 않으려면 어떻게해야합니까? 다음과 같은 것이 필요합니다.print a if b
Ricky Robinson

2
else a그렇다면 더 좋을 것입니다else 0
aneroid

13
if b: print a이 경우에 간단한 것이 필요합니다
jamylak

4
대답을 고치십시오. '문장'이라는 단어가 아닌 경우 거의 좋기 때문에 완전히 나빴습니다. 질문의 요지는 점입니다 하지 진술.
Jan Hudec

1
+ 1-1 : else 표현이 필수임을 지적하는 데는 좋지만 문제가되는 경우에 대한 답변을 제공하지 않는 것은 좋지 않습니다 : print "nothing"( ""또는 의 행에 None있는 내용, 다른 답변의 세부 사항 참조).
sancho.s ReinstateMonicaCellio

18

'else'진술은 필수입니다. 당신은 이런 것들을 할 수 있습니다 :

>>> b = True
>>> a = 1 if b else None
>>> a
1
>>> b = False
>>> a = 1 if b else None
>>> a
>>> 

편집하다:

또는 필요에 따라 다음을 시도 할 수 있습니다.

>>> if b: print(a)

15

원하지 않는 경우 다음을 수행 from __future__ import print_function할 수 있습니다.

a = 100
b = True
print a if b else "",  # Note the comma!
print "see no new line"

어떤 지문 :

100 see no new line

from __future__ import print_functionpython 3 이상을 사용 하지 않거나 사용 하지 않는 경우 :

from __future__ import print_function
a = False
b = 100
print(b if a else "", end = "")

else를 추가하는 것은 구문 상으로 코드를 올바르게 작성하기 위해 변경해야하는 유일한 변경 사항입니다. 조건부 표현식에 대해 else가 필요합니다 ( "in else if blocks").

내가 스레드에서 다른 사람들을 사용하지 않았 None거나 좋아하지 않는 이유 0는 사용 None/0하면 프로그램이 print None또는 print 0경우에 있기 때문 b입니다 False.

이 주제에 대해 읽으려면 이 기능이 Python에 추가 된 패치의 릴리스 정보에 대한 링크 를 포함 시켰습니다 .

위의 '패턴'은 PEP 308에 표시된 패턴과 매우 유사합니다.

이 문법은 이상하고 거꾸로 보일 수도 있습니다. 조건이 C의 c에서와 같이 앞이 아닌 표현식의 중간에 왜 있습니까? x : y? 새로운 구문을 표준 라이브러리의 모듈에 적용하고 결과 코드를 읽는 방법을 확인하여 결정을 확인했습니다. 조건식이 사용되는 많은 경우에, 하나의 값은 '일반적인 경우'인 것처럼 보이고 하나의 값은 '예외적 인 경우'이며, 조건이 충족되지 않는 경우에만 사용됩니다. 조건부 구문은이 패턴을 좀 더 분명하게 만듭니다.

내용 = ((doc + '\ n') doc else '')

따라서 전반적으로 이것이 합리적인 접근 방법이라고 생각하지만 다음과 같은 단순성으로 논쟁 할 수는 없습니다.

if logging: print data

감사. 여기 print ""에서 빈 줄이 여전히 인쇄됩니다.
Ricky Robinson

감사. end에서 argumnt은 print단지 바로, 파이썬 3.x를 나타납니다?
Ricky Robinson

1
예, 저는 2.7 명입니다. 따라서 from __future__ import print_function
Noelkd

11

2.5 이후 로 C의”? :” 삼항 조건 연산자 에 해당하는 구문을 사용할 수 있으며 구문은 다음과 같습니다.

[on_true] if [expression] else [on_false]

따라서 예제는 훌륭하지만 다음 else과 같이 간단히 추가해야합니다 .

print a if b else ''

2
참고는 print ''여전히 Noelkd에 의해이 질문에 피할 줄 바꿈을 인쇄 할 수 있습니다.
yoniLavi 2016 년

8

당신이 사용할 수있는:

print (1==2 and "only if condition true" or "in case condition is false")

마찬가지로 다음과 같이 계속 진행할 수 있습니다.

print 1==2 and "aa" or ((2==3) and "bb" or "cc")

실제 예 :

>>> print "%d item%s found." % (count, (count>1 and 's' or ''))
1 item found.
>>> count = 2
>>> print "%d item%s found." % (count, (count>1 and 's' or ''))
2 items found.

7

문자열 형식 으로 수행 할 수 있습니다 . % 표기법뿐만 아니라 .format ()f-strings (3.6에 새로 추가 ) 와 함께 작동합니다.

print '%s' % (a if b else "")

또는

print '{}'.format(a if b else "")

또는

print(f'{a if b else ""}')

이것은 형식화와 관련이 없습니다. 당신은 할 수 있습니다 print a if b else "". 이것이 바로 Noelkd의 답변이하는 일입니다.
melpomene

@melpomene이지만 ""를 인쇄하면 새로운 줄 print "",이 생겨 파이썬 2에서는 (콜론)을 사용하지 않고 파이썬 3에서는 사용할 print("", end="")수 없습니다.
m3nda

5

귀하의 경우이 작동합니다 :

a = b or 0

편집 : 어떻게 작동합니까?

질문에

b = True

그래서 평가

b or 0

결과

True

에 할당되어 a있습니다.

인 경우 b == False?에 할당 될 b or 0두 번째 피연산자로 평가 0됩니다 a.


3
이 표현의 추함과 실수는 우리가 조건부 표현을 먼저하는 이유입니다.
Jan Hudec

5

이 시도 . 도움이 될 수 있습니다

a=100
b=True

if b:
   print a

4

당신은 단순히 지나치게 복잡합니다.

if b:
   print a

1
물론 가장 쉬운 방법입니다. 당시 (2012 년 8 월)에 다음과 같은 작업을 수행하려고했다고 생각합니다.if DEBUG: print something
Ricky Robinson

중복 된 답변? SkariaArun의 의견과 의견.
sancho.s ReinstateMonicaCellio

2

다음 else과 같은 경우 항상 인라인이 필요합니다 .

a = 1 if b else 0

그러나 더 쉬운 방법은 다음과 같습니다 a = int(b).


3
-1 : 더 쉬움. 그리고 완전히 읽을 수 없습니다. 어쨌든 asker가 원하는 것은 아닙니다.
Jan Hudec

ITYM a = int(bool(b)).
glglgl

1

글쎄, 왜 간단하게 작성하지 않습니까?

if b:
    print a
else:
    print 'b is false'

1

흠, 당신은 목록 이해 와 함께 할 수 있습니다 . 이것은 실제 범위가있는 경우에만 의미가 있지만 작업을 수행합니다.

print([a for i in range(0,1) if b])

또는 그 두 변수 만 사용하십시오.

print([a for a in range(a,a+1) if b])
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.