한 줄에 여러 문장을 넣는 방법?


143

이 질문을 정확히 숙고 할 제목이 무엇인지 잘 모르겠습니다.

나는 파이썬에서 약간의 이해를 알고 있지만 '읽기'가 매우 어려워 보입니다. 내가 보는 방식으로 이해력은 다음 코드와 동일하게 달성 할 수 있습니다.

for i in range(10): if i == 9: print('i equals 9')

이 코드는 현재 이해력이 작동하는 방식보다 훨씬 쉽게 읽을 수 있지만 한 줄에 두 개의 ':'을 가질 수 없다는 것을 알았습니다 ...

내 질문:

다음 예제를 ONE LINE에 가져올 수있는 방법이 있습니까?

try:
    if sam[0] != 'harry':
        print('hello',  sam)
except:
    pass

이와 같은 것이 좋을 것입니다.

try: if sam[0] != 'harry': print('hellp',  sam)
except:pass

그러나 다시 나는 충돌하는 ':'를 만난다. 나는 예외없이 try (또는 이와 비슷한) 를 실행할 수있는 방법이 있는지 알고 싶다. 낭비되는 선.

입력 해 주셔서 감사합니다 ... 여기에 웃는 사람이 있습니다 : D


왜 예외가 발생합니까?
이그나시오 바스케스-아 브람스

1
sam [2]가 존재하지 않을 수 있습니다. 이것은 가상의 예입니다. 감사
Rhys

4
이해력은 파이썬에서 다릅니다. 한 줄에 모든 것을 넣는 것은 이해가되지 않습니다.
Felix Kling

나는 이것을 알고 있습니다. 감사. 나는 이해력이 더 잘 작동 할 수 있다고 생각하지만 내 문제 / 질문의 근본 인 결장으로 인해 불가능할 수 있음을 시연하고 있었다
Rhys

그냥 사용 \n의 및 들여 쓰기에 대한 사용 공간.

답변:


144

불행히도, 파이썬으로는 원하는 것이 불가능합니다 (파이썬은 명령 줄 한 줄짜리 프로그램에 쓸모가 없습니다). 괄호를 명시 적으로 사용하더라도 구문 예외를 피할 수는 없습니다. 세미콜론으로 구분 된 일련의 간단한 문장으로 벗어날 수 있습니다.

for i in range(10): print "foo"; print "bar"

그러나 들여 쓰기 된 블록 ( if) 을 도입하는 구문을 추가하자마자 줄 바꿈이 필요합니다. 또한,

for i in range(10): print "i equals 9" if i==9 else None

합법적이며 원하는 것과 비슷할 수 있습니다.

에 관해서는 try ... except일이 : 그것은 완전히 쓸모없는 것 없이except . try"이 코드를 실행하고 싶지만 예외가 발생할 수 있습니다"라고 말합니다. 예외가 마음에 들지 않으면를 남겨 두십시오 try. 그러나 당신이 그것을 넣 자마자, 당신은 "잠재적 인 예외를 처리하고 싶다"고 말합니다. 그런 pass다음 구체적으로 처리하지 않기를 원한다고 말합니다. 그러나 그것은 코드가 계속 실행된다는 것을 의미합니다. 그렇지 않으면 그렇지 않습니다.


1
흥미롭게도, 당신의 후자의 예가 내가 찾고있는 대답에 가장 가깝다고 생각합니다. 감사합니다
Rhys

'시도'질문과 관련하여 ... 무슨 경우, 어느 시점에서 예외가 발생한다는 것을 알고 있지만 코드가 계속 실행되기를 원합니다 ... 예를 들어 문자열이 정수일 수 있는지 확인하십시오. 시도 : int (string) ... 할 수 없다면 다음 줄로 넘어가십시오. 예외가 필요하지 않습니다. 나는 당신이 무슨 말을하는지 알지만 이러한 유형의 점검 / 오류 처리를 수용 할 수있는 다른 방법이 있습니까
Rhys

4
Re try:: Python 구문 규칙은 "except"절을 동반하지 않고 단독 "try"절을 사용하지 못하게합니다. 내가하는 일은 try-except를 자체 함수로 감싸고 대신 이것을 호출하는 것입니다. 좋아 if (checkint(s))...하고 def checkint(s): try: int(s)\nreturn True\nexcept: return False.
ThomasH

ThomasH, 귀하의 의견이 어딘가에있는 질문에 대한 답변이되었으므로 의견을 밝힐 수있었습니다. 우수한.
Ivan X

5
@ThomasH " (파이썬을 명령 줄 one-liner 프로그램에서 쓸모 없게 만듭니다) ": 나를 방해하지 않습니다. 95 %의 경우 개행이 필요하지 않습니다. 그리고 나머지는 \ n : python -c "exec\"print 'A' \nfor i in 1,2,3: print i \""
kxr

52

다음과 같이 내장 exec 문을 사용할 수 있습니다.

exec("try: \n \t if sam[0] != 'harry': \n \t\t print('hello',  sam) \nexcept: pass")

\n개행은 어디에 있고 \t들여 쓰기 (탭)로 사용됩니다.
또한 사용하는 공간을 세어 들여 쓰기가 정확하게 일치하도록해야합니다.

다른 모든 답변이 이미 말했듯이 당신이 정말로 그러나,이 사용할 수 물론 단지이다 한 줄에 넣어.

exec 임의의 파이썬 코드를 실행할 수 있기 때문에 (특히 웹 응용 프로그램을 만들 때) 매우 위험한 문장입니다.


4
감사합니다! 이것은 다른 것과 달리 실제로 작동하기 때문에 정답으로 표시되어야합니다. 그러나 물론, 결코 당신이하지 않는 한이 작업을 수행하지 않습니다! 그러나 고정 된 한 줄 텍스트 상자에 스크립트를 입력해야하기 때문에 실제로이 구문이 필요합니다.
Sanjay Manohar

감사 ! 생명의 은인! 스크립트에서 이것을 사용하지 않지만 대화 형 쉘에서는 디버깅에 유용합니다 ... 대화식 쉘을 종료하고 깨끗한 환경을 얻기 위해 다시 시작하면 특정 단계를 반복해야합니다. 일부 기능을 실행 한 다음 특정 기능으로 일부 테스트를 수행하십시오. Soooo, 나는 하나의 라이너에 "모듈 가져 오기, 일부 기능 실행"을 넣는 방법을 찾고 있었기 때문에 기록에서 신속하게 다시 호출하여 실행할 수 있습니다 (역사에서 5 가지 항목을 다시 호출하지 않고) +1
oneindelijk

exec("try: \n if sam[0] != 'harry': print('hello', sam) \nexcept: pass") nicer :)
kxr

kxr 감사합니다 :) (나는 대답을 개선하기 위해 당신의 아이디어를 사용했습니다)
elecprog

7

예,이 게시물은 8 살이지만 누군가가 여기에 와서 답변을 찾고있는 경우를 대비하여 세미콜론을 사용할 수 있습니다. 그러나 if / elif / else staments, for / while 루프를 사용할 수 없으며 함수를 정의 할 수 없습니다. 이것의 주요 용도는 함수를 정의하거나 if / elif / else / for / while 문 / 루프를 사용할 필요가없는 가져온 모듈을 사용할 때입니다.

다음은 노래의 아티스트, 노래 이름을 사용하고 가사를 찾기 위해 천재를 검색하는 예입니다.

import bs4, requests; song = input('Input artist then song name\n'); print(bs4.BeautifulSoup(requests.get(f'https://genius.com/{song.replace(" ", "-")}-lyrics').text,'html.parser').select('.lyrics')[0].text.strip())

6

나는 이것을 하지 않는 것이 좋습니다 ...

당신이 설명하는 것은 이해 가 아닙니다 .

파이썬 코드에 대한 PEP 8 스타일 가이드 내가 않는 것이 좋습니다는,이 복합 명령문에 대해 말하기를 가지고 :

  • 복합 문장 (같은 줄에 여러 문장)은 일반적으로 사용하지 않는 것이 좋습니다.

예:

      if foo == 'blah':
          do_blah_thing()
      do_one()
      do_two()
      do_three()

오히려 :

      if foo == 'blah': do_blah_thing()
      do_one(); do_two(); do_three()

다음은 구별을위한 샘플 이해력입니다.

>>> [i for i in xrange(10) if i == 9]
[9]

6

나는 이것을 장려하지 않지만 명령 줄에 있다고 말하면 파이썬 외에는 아무것도 없으며 실제로 하나의 라이너가 필요합니다.

python -c "$(echo -e "a='True'\nif a : print 1")"

우리가 여기서하는 일은 \n파이썬 코드를 평가하기 전에 사전 처리하는 것입니다 .

슈퍼 해키입니다! 이와 같은 코드를 작성하지 마십시오.


1

아마도 "and"또는 "or"

거짓 후 "또는"을 쓸 필요

사실 "and"를 쓸 필요가

처럼

n=0
def returnsfalse():
    global n
    n=n+1
    print ("false %d" % (n))
    return False
def returnstrue():
    global n
    n=n+1
    print ("true %d" % (n))
    return True
n=0
returnsfalse() or  returnsfalse() or returnsfalse() or returnstrue() and returnsfalse()

결과:

false 1
false 2
false 3
true 4
false 5

또는 아마도

(returnsfalse() or true) and (returnstrue() or true) and ...

Google에서 "한 줄 파이썬에 여러 문장을 넣는 방법"을 검색하여 직접 질문에 답하지 않고 다른 사람이 이것을 필요로하는 것으로 검색했습니다.


1

A의 python -c중심의 솔루션, 당신은 배쉬 쉘을 사용 다만, 예이 예에서 같은 간단한 한 줄의 구문을 가질 수 있습니다 :

다음과 같이 ( except: pass명령을 포함하여 샘플과 매우 유사한) 것을 원한다고 가정하십시오 .

python -c  "from __future__ import print_function\ntry: import numpy; print( numpy.get_include(), end='\n' )\nexcept:pass\n" OUTPUT_VARIABLE __numpy_path

작동하지 않으며이 오류가 발생합니다.

  File "<string>", line 1
    from __future__ import print_function\ntry: import numpy; print( numpy.get_include(), end='\n' )\nexcept:pass\n
                                                                                                                  ^
SyntaxError: unexpected character after line continuation character `

\n이스케이프 시퀀스 의 Bash와 Python 해석 간의 경쟁 때문 입니다. 문제를 해결하기 위해 $'string'Bash 구문을 사용 \n하여 Python보다 Bash 해석 을 강제 실행할 수 있습니다 . 예제를 더 어렵게 만들기 위해 end=..\n..파이썬 인쇄 호출에 일반적인 파이썬 사양을 추가 했습니다. 결국 \nbash와 Python에서 각각 관심있는 텍스트에 대해 함께 해석 할 수 있습니다 . 결국 적절한 해결책은 다음과 같습니다.

python -c  $'from __future__ import print_function\ntry:\n import numpy;\n print( numpy.get_include(), end="\\n" )\n print( "Hello" )\nexcept:pass\n' OUTPUT_VARIABLE __numpy_path

그러면 오류없이 올바른 클린 출력이 생성됩니다.

/Softs/anaconda/lib/python3.7/site-packages/numpy/core/include
Hello

참고 : 이것은 exec문제가 여전히 동일하기 때문에 지향적 인 솔루션 에서도 잘 작동 합니다 (Bash 및 Python 인터프리터 경쟁).

참고 2 : 일부 \n를 일부 대체하여 문제를 해결할 수는 ;있지만 언제든지 작동하지 않습니다 (파이썬 구문에 따라 다름). 내 솔루션을 사용하면 고전적인 멀티 라인 파이썬 프로그램을 항상 "한 줄"할 수 있습니다.

참고 3 : 물론, 한 줄로 할 때 항상 파이썬 공간과 들여 쓰기를 처리해야합니다. 실제로 우리는 여기서 엄격하게 "한 줄짜리"는 아니지만 \nBash와 Python 사이 의 이스케이프 시퀀스를 적절히 혼합 관리합니다. . 이것이 우리가 고전적인 멀티 라인 파이썬 프로그램을 다룰 수있는 방법입니다. 솔루션 샘플에서도이를 보여줍니다.


0

많은 것들을 섞어서 질문에 대답하기가 어렵습니다. 짧은 대답은 : 내가 아는 한, 당신이하고 싶은 것은 파이썬에서 불가능합니다-정당한 이유가 있습니다!

더 긴 대답은 파이썬으로 개발하려면 파이썬에 익숙해 져야한다는 것입니다. 이해력은 읽기 어렵지 않습니다. 당신은 그것들을 읽는 데 익숙하지 않을 수도 있지만, 파이썬 개발자가 되려면 익숙해 져야합니다. 필요에 맞는 언어가 있다면 그 언어를 선택하십시오. 파이썬을 선택한다면, 파이썬적인 방식으로 문제를 해결할 준비를하십시오. 물론 파이썬과 싸울 수는 있지만 재미는 없습니다! ;-)

그리고 당신이 진짜 문제가 무엇인지 말해 주면, pythonic 응답을 얻을 수도 있습니다. "한 줄에 무언가 얻기"는 보통 프로그래밍 문제가 아닙니다.


나는 파이썬을 좋아한다! 나는 이해력이 더 잘 구조화 될 수 있다고 생각하지만 내 문제 / 질문의 근본 인 콜론으로 인해 불가능하다는 것을 보여주고 있습니다 ... 0]! = 'harry': print ( 'hellp', sam)이 불가능합니다 ... 이것이 맞습니까? 고맙습니다 ... 메신저 그냥 디버그 목적으로 이것을 사용하므로 쉽게 제거 할 수 있고 많은 공간을 차지하지 않는 작은 간단한 코드를 찾고 있습니다 lol
Rhys

네, 아는 한 불가능합니다. 그러나 누군가가 이미 언급했듯이, 당신이하는 일은 이해력과는 다릅니다. 코드를 쉽게 제거하려면 기능에 넣으십시오. "except : pass"문제와 관련하여 예외 나 그와 비슷한 것을 무시하는 데코레이터를 생각해보십시오. 다시 : 항상 이미 염두에 둔 솔루션의 문제가 아니라 실제 문제를 설명하십시오. ;-)
Achim 2016 년

3
왜 사람들은 "많은 것들을 섞고 있습니다"와 같은 도발적인 말로 답변을 시작해야합니까? 내가 할 수 있다면 투표해라
John Jiang

"한 줄로 무언가를 얻는 것"은 보통 프로그래밍 문제가 아닙니다. "—> 그러나 이것은 종종 sysadmin 문제이므로이 문제와 관련하여 여전히 문제가 있습니다.
Alex F

0

가능한 한 ;-)

# not pep8 compatible^
sam = ['Sam',]
try: print('hello',sam) if sam[0] != 'harry' else rais
except: pass

파이썬에서 매우 추악한 일을 할 수 있습니다 :

def o(s):return''.join([chr(ord(n)+(13if'Z'<n<'n'or'N'>n else-13))if n.isalpha()else n for n in s])

한 줄에 99 개의 문자로 rot13 / cesa 암호화 기능입니다.


-2

예를 들면 다음과 같습니다.

범위 (80, 90)의 i의 경우 : print (i, end = "") if (i! = 89) else print (i)

출력 : 80 81 82 83 84 85 86 87 88 89

>

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.