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


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.