여러 개의 문을 어떻게 한 줄에 넣을 수 있습니까?
저는 파이썬의 이해를 조금 알고 있지만, 그것들은 '읽는' 것이 매우 어려워 보입니다.제가 보기에 이해력은 다음 코드와 동일하게 이루어질 수 있습니다.
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)")"
여기 사전 처리 중입니다.\n
Python 코드를 평가하기 전에.
정말 촌스럽군요!이런 식으로 코드를 작성하지 마세요.
이렇게 하지 않는 것이 좋습니다...
당신이 설명하고 있는 것은 이해가 아닙니다.
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 -c
Bash 셸을 사용하는 경우 다음과 같은 간단한 한 줄 구문을 사용할 수 있습니다.
이와 가정해 .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 공간과 들여쓰기를 처리해야 합니다. 실제로 우리는 여기서 엄격하게 "원라이닝"하는 것이 아니라 적절한 혼합 관리를 수행하기 때문입니다.\n
Python.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에 동의합니다), 약간의 코드 스타일 고려가 있습니다.
당신은 많은 것을 섞고 있어서 당신의 질문에 대답하기가 어렵습니다.간단한 대답은 다음과 같습니다. 제가 아는 한, 당신이 하고 싶은 것은 파이썬에서 가능하지 않습니다 - 이유가 있습니다!
더 긴 대답은 당신이 파이썬에서 개발하고 싶다면 파이썬을 더 편하게 사용해야 한다는 것입니다.이해력은 읽기 어렵지 않습니다.당신은 그것들을 읽는 것에 익숙하지 않을 수도 있지만, 당신이 파이썬 개발자가 되고 싶다면 그것에 익숙해져야 합니다.당신의 필요에 더 잘 맞는 언어가 있다면, 그것을 선택하세요.만약 당신이 파이썬을 선택한다면, 파이썬 방식으로 문제를 해결할 준비를 하세요.물론 당신은 파이썬과 싸울 자유가 있지만, 재미없을 것입니다! ;-)
그리고 만약 여러분이 진짜 문제가 무엇인지 말해준다면, 여러분은 심지어 피톤적인 대답을 얻을 수도 있습니다."한 줄로 무언가를 얻는 것"은 일반적으로 프로그래밍 문제가 아닙니다.
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입니다.
- yaml 및 syslib 가져오기
- 람다 함수는 첫 번째 sys.argv1을 사용하여 yaml 파일을 읽습니다.
- sys.argv2 sys.argv3를 사용하여 람다 함수에서 반환 중첩-반복으로부터 기대값 가져오기
- print yaml_as_module은 test_var를 변수로 로드합니다.
- by test_varby
echo $test_var
`
$
$ 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 스크립트에서 다중 줄 파이썬 코드를 실행하는 방법은 무엇입니까?
터미널에서 파이썬을 사용하여 다중 라인 코드를 작성하려면 어떻게 해야 합니까?
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
'programing' 카테고리의 다른 글
Vuex 스토어 상태가 변형될 때 Vue App 상태가 업데이트되지 않음 (0) | 2023.06.28 |
---|---|
MongoDB에서 최근에 삭제된 문서를 복구할 수 있는 방법이 있습니까? (0) | 2023.06.28 |
Vuex가 일부 데이터를 구성 요소로 반환하는 중 (0) | 2023.06.23 |
삽입이 성공하지 못한 경우 기본 키 증가를 방지하시겠습니까? (0) | 2023.06.23 |
Mongodb는 오늘 날짜별로 생성된 결과를 찾습니다. (0) | 2023.06.23 |