IT TIP

파이썬 삼항 연산자없이

itqueen 2020. 12. 10. 21:35
반응형

파이썬 삼항 연산자없이


파이썬에서 한 줄로 할 수 있습니까?

if <condition>:
    myList.append('myString')

삼항 연산자를 시도했습니다.

myList.append('myString' if <condition>)

하지만 내 IDE ( MyEclipse )는 else.


예, 다음과 같이 할 수 있습니다.

<condition> and myList.append('myString')

경우 <condition>거짓, 다음에 시작된다 단락과 오른쪽은 평가되지 않습니다. 경우 <condition>에 해당하고, 그 오른쪽이 평가되고 요소가 추가된다.

위의 작업을하는 것은 비 파이썬 적이 지 않다는 점을 지적 할 것입니다.

if <condition>: myList.append('myString')

데모:

>>> myList = []
>>> False and myList.append('myString')
False
>>> myList
[]
>>> True and myList.append('myString')
>>> myList
['myString']

언어가 구문 사용을 허용하지 않는 이유

variable = "something" if a_condition

하지 않고는 else경우 여기서,이다 a_condition == False, variable갑자기 알 수 없습니다. 기본값은 None이지만 파이썬은 모든 변수 할당이 실제로 명시 적 할당을 생성하도록 요구합니다. 이는 함수 호출과 같은 경우에도 적용됩니다. 함수에 전달 된 값 은 할당 문의 RHS같이 평가 되기 때문입니다.

마찬가지로 모든 returns는 조건부라고해도 실제로 반환해야합니다 return. 예 :

return variable if a_condition

허용되지 않지만

return variable if a_condition else None

두 번째 예제는 명시 적으로 무언가를 반환하도록 보장되기 때문에 허용됩니다.


if <condition>: myList.append('myString')

그렇지 않으면 아닙니다. 한 줄에 넣어야하는 이유는 무엇입니까?

"삼항 연산자"는 연산자 입니다. 다른 연산자와 마찬가지로 무언가를 반환해야 하므로 else없이 삼항 연산자를 어떻게 가질 수 있습니까? 조건이 참과 같지 않으면 무엇을 반환해야합니까?


기본적으로 구성을 요청합니다 do_thing() if <condition> else pass( SyntaxError실행 되면을 던질 것입니다 ). 내가 연구하는 동안 (다소) 비슷한 질문 do_thing() if condition else None 이 당신이 얻을 수있는 한 가깝다 는 것을 발견했듯이 (이것은 할 수있는 또 다른 방법입니다 <condition> and do_thing()). 따라서이 아이디어와 다른 답변을 요약하면 다음과 같은 옵션이 있습니다.

  • if <condition>: myList.append('myString') — '해키'가 가장 적은 (따라서 선호되는) 방법 인 것 같습니다.
  • <condition> and myList.append('myString')
  • myList.append('myString') if <condition> else None

myList.extend(['myString'] if condition else []) 다른 솔루션보다 더 많은 작업이지만 작동합니다.


다음과 같이 할 수 있습니다.

myList.append('myString') if <condition> else False

또는

myList.append('myString') if <condition> else 0

참고 URL : https://stackoverflow.com/questions/12199757/python-ternary-operator-without-else

반응형