programing

여러 개의 문을 어떻게 한 줄에 넣을 수 있습니까?

subpage 2023. 6. 23. 22:10
반응형

여러 개의 문을 어떻게 한 줄에 넣을 수 있습니까?

저는 파이썬의 이해를 조금 알고 있지만, 그것들은 '읽는' 것이 매우 어려워 보입니다.제가 보기에 이해력은 다음 코드와 동일하게 이루어질 수 있습니다.

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

는 현재 가 작동하는, 저는 이 두 의 이코는현이작재훨읽쉽방, 가수것다되니알습었게을없을 가질 수.:과 같이 이끌었습니다.이를 통해 다음과 같은 이점을 얻을 수 있습니다.

다음 예시를 한 줄로 묶을 수 있는 방법이 있습니까?

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

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

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

하지만 또다시 저는 갈등을 겪습니다.:s의

또 다른 방법이 있는지 알고 싶습니다.try없이 없이 ( 것except내가 말해야 하는 것은 전혀 무의미해 보입니다.except:pass ㅠㅠ 되는 전화야그건 낭비된 전화야.

불행하게도, 당신이 원하는 것은 Python에서 가능하지 않습니다 (이것은 Python을 명령줄 원라이너 프로그램에 거의 쓸모 없게 만듭니다).괄호를 명시적으로 사용하더라도 구문 예외를 피할 수 없습니다.세미콜론으로 구분된 일련의 간단한 문을 사용할 수 있습니다.

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그러면 당신이 그것을 구체적으로 다루지 않기를 원한다고 말합니다.하지만 이는 코드가 계속 실행된다는 것을 의미합니다. 그렇지 않으면 실행되지 않습니다.

다음과 같은 기본 제공 exec 문을 사용할 수 있습니다.

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

에▁where디\n는 새 는새라인고이운로▁is▁and고▁a라인이.\t들여쓰기(탭)로 사용됩니다.
또한 들여쓰기가 정확히 일치하도록 사용하는 공간을 계산해야 합니다.

하지만, 다른 모든 대답들이 이미 말했듯이, 물론 이것은 정말로 한 줄에 놓아야 할 때만 사용됩니다.

exec임의의 Python 코드를 실행할 수 있기 때문에 (특히 웹 앱을 구축할 때) 상당히 위험한 문장입니다.

이제 세미콜론만 사용할 수 있습니다.그러나 if/ellif/else 문은 루프 중에 사용할 수 없으며 함수를 정의할 수도 없습니다.가져온 모듈을 사용할 때는 함수를 정의하거나 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())

저는 이것을 장려하지는 않지만, 당신이 명령 줄에 있다고 가정하면, 당신은 파이썬 외에는 아무것도 가지고 있지 않고 정말로 원라이너가 필요하며, 당신은 이것을 할 수 있습니다.

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

여기 사전 처리 중입니다.\nPython 코드를 평가하기 전에.

정말 촌스럽군요!이런 식으로 코드를 작성하지 마세요.

이렇게 하지 않는 것이 좋습니다...

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

Python Code를 위한 PEP 8 Style Guide for Python Code는 복합문에 대해 다음과 같이 말합니다.

  • 복합 문(같은 줄에 여러 개의 문)은 일반적으로 권장되지 않습니다.

예:

      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]

당분간python -cBash 셸을 사용하는 경우 다음과 같은 간단한 한 줄 구문을 사용할 수 있습니다.

이와 가정해 .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 `

이는 Bash와 Python 간의 경쟁 관계 때문입니다.\n이스케이프 시퀀스문제를 해결하려면 다음을 사용할 수 있습니다.$'string'에서 강제로 Bash를 지정합니다.\n파이썬 이전의 바시 해석.

좀 더 인 Python 예를더어만들위기해일다추니가습했파을이썬제인을 했습니다.end=..\n..파이썬 프린트 콜의 사양: 마지막에 당신은 두 가지를 모두 얻을 수 있을 것입니다. \n각각의 관심사에 대한 Bash와 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어떤 사람들은;그러나 Python 구조에 따라 언제든지 작동하지는 않지만, 내 솔루션은 고전적인 다중 줄 Python 프로그램의 모든 부분을 항상 "한 줄로" 사용할 수 있습니다.

참고 3: 물론 원라이닝을 할 때는 항상 Python 공간과 들여쓰기를 처리해야 합니다. 실제로 우리는 여기서 엄격하게 "원라이닝"하는 것이 아니라 적절한 혼합 관리를 수행하기 때문입니다.\nPython.bash 입니다.이것이 우리가 고전적인 다중 라인 파이썬 프로그램을 다룰 수 있는 방법입니다.솔루션 샘플에서도 이를 확인할 수 있습니다.

실제로 가능합니다 ;-)

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

Python에서는 다음과 같은 매우 추악한 작업을 수행할 수 있습니다.

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

ROT13과 Caesar 암호화 기능을 한 줄로 제공합니다.

"그리고"나 "또는"으로 말입니다.

거짓 뒤에는 "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 ...

나는 구글에서 "여러 개의 문을 한 줄에 넣는 방법 파이썬"으로 검색하여 여기에 왔습니다.질문에 직접적으로 대답하지는 않지만, 아마도 다른 누군가가 이것을 필요로 할 것입니다.

만약 당신이 그것을 시도하지 않고 원한다면, 그것은 해결책입니다.

목록에서 'harry'인 경우 'hello'를 인쇄하려면 다음을 해결책으로 사용됩니다.

'hello' if 'harry' in sam else ''

가능한 PEP 8 호환 솔루션이 있습니다.

해책의 if, else

[print("i equals 9") for i in range(10) if i == 9]

대신 목록 을 합니다.if, else.

저는 이것이 아마도 유용한 속임수라고 생각합니다. Thomas H의 논평에서 이미 언급했습니다.그래서 이것은 심각한 해결책입니다.

해책의 try, except

print("hello", sam) \
    if "sam" in locals() \
    and hasattr(sam, "__getitem__") \
    and 0 < len(sam) \
    and sam[0] != "harry" \
    else None

방법을 처리해 보십시오.expect인라인 방식으로 행동할 것입니다.if진술.이 코드 라인은 다음의 존재를 처리하기 위해 전문화되었습니다.sam[0] 일반적인 것을 해결할 수 없었습니다.try, except 사례.

코드 한 줄(=w=)입니다.비록 정확히 한 줄로 쓰여진다면, PEP 8 E501모순되기에는 너무 길 수 있습니다.그래서 이것은 재미를 위한 해결책입니다.

  • "sam" in locals 여부를 확인sam입니다. 이 변수는 다음과 같습니다.

  • hasattr(sam, "__getitem__")가 있는지 합니다.sam로 색인화할 수 .sam[n];

  • 0 < len(sam) 여부를 확인sam항목이 0개를 초과합니다.

  • 럼그체를 확인합니다.sam[0] != "harry".

  • 경고:이 기능은 다음과 같은 경우에 작동합니다.type(sam) == list다른 사례는 테스트되지 않았습니다.이 그 만면당다확한신약이신이 확실하다면.sam이고, 길지 것입니다.

    print("hello", sam) if 0 < len(sam) and sam[0] != "harry" else None
    

추가 내용

다른 답변(예: Johnsyweb이 언급한 바와 같이 한 줄에 여러 개의 문이 있는 것은 선호되지 않습니다(PEP 8E701).따라서 가능한 모든 파이썬(PEP 8) 솔루션의 경우, 한 줄 코드는 명시적인 코드를 피해야 합니다.if, else그리고.try, except.

Thomash의 또 다른 논평에서 언급했듯이, 더 나은 해결책은try, except포장 기능을 사용해야 합니다.이렇게 하면 코드가 한 줄 더 추가됩니다. 그러나 함수를 호출하면 확인만 할 수 없습니다.sam그러나 다른 변수도 마찬가지입니다.

def check_harry(name):
    try:
        print("hello", name) if name[0] != "harry" else None
    except (NameError, TypeError, IndexError):
        pass

check_harry(uncle)
check_harry(sam)

이것은 더 심각한 해결책이 될 수 있습니다.로 맨 주먹임맨.except PEP 8E722 때문에 권장되지 않습니다.비록 이 강박관념이except: pass시간 낭비인 것 같습니다(그리고 저는 보통 T_T에 동의합니다), 약간의 코드 스타일 고려가 있습니다.

당신은 많은 것을 섞고 있어서 당신의 질문에 대답하기가 어렵습니다.간단한 대답은 다음과 같습니다. 제가 아는 한, 당신이 하고 싶은 것은 파이썬에서 가능하지 않습니다 - 이유가 있습니다!

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

그리고 만약 여러분이 진짜 문제가 무엇인지 말해준다면, 여러분은 심지어 피톤적인 대답을 얻을 수도 있습니다."한 줄로 무언가를 얻는 것"은 일반적으로 프로그래밍 문제가 아닙니다.

토마스에 기반으로H의 대답:

for i in range(4): print "i equals 3" if i==3 else None

출력:

None
None
None
i equals 3

다음과 같이 업데이트할 것을 제안합니다.

for i in range(4): print("i equals 3") if i==3 else print('', end='')

출력:

i equals 3

참고로 저는 Python 3에 있으며 두 개의 인쇄 명령을 사용해야 했습니다. pass나고끝 else작동하지 않습니다.

이 솔루션은 복잡할 수 있지만 Ubuntu를 합니다.

파이썬 의 한 줄은 can입니다.

`

$
$ test_var=$(python3 -c $"import yaml,sys; yaml_as_dict=(lambda :yaml.safe_load(open(f'{sys.argv[1]}','r').read()))()[sys.argv[2]][sys.argv[3]]; print(yaml_as_dict)" <argv1> <argv2> <argv3>)
$
$ echo $test_var
$ 

bash 스크립트에서 다중 줄 파이썬 코드를 실행하는 방법은 무엇입니까?

터미널에서 파이썬을 사용하여 다중 라인 코드를 작성하려면 어떻게 해야 합니까?

python EOF에서 bash 변수를 정의하는 방법

sam = ['harry', 'john']

print('hello ' + sam[0] if sam[0] != 'harry' else '')

다음은 예입니다.

for i in range(80, 90): print(i, end=" ") if (i!=89) else print(i)

출력:

80 81 82 83 84 85 86 87 88 89
>>>

언급URL : https://stackoverflow.com/questions/6167127/how-can-i-put-multiple-statements-in-one-line

반응형