파이썬에 삼항 조건 연산자가없는 경우 다른 언어 구문을 사용하여이를 시뮬레이션 할 수 있습니까?
case [...] { when ... then ...} [ else ... ] end
비슷한 효과를 갖지만 전혀 3 진은 아닙니다.
파이썬에 삼항 조건 연산자가없는 경우 다른 언어 구문을 사용하여이를 시뮬레이션 할 수 있습니까?
case [...] { when ... then ...} [ else ... ] end
비슷한 효과를 갖지만 전혀 3 진은 아닙니다.
답변:
예, 버전 2.5에서 추가 되었습니다. 표현식 구문은 다음과 같습니다.
a if condition else b
먼저 condition
평가 된 후 a
또는 b
의 부울 값을 기준으로 정확하게 평가되거나 반환 condition
됩니다. 경우에 condition
평가하여 제품에 True
, 다음 a
평가 및 반환 있지만 b
때 무시, 또는 다른되고 b
평가 및 반환되지만 a
무시됩니다.
이것은 condition
참일 때만 a
평가되고 b
전혀 평가되지 않기 때문에 단락을 허용 하지만, condition
거짓 일 때만 b
평가되고 a
전혀 평가되지 않기 때문입니다.
예를 들면 다음과 같습니다.
>>> 'true' if True else 'false'
'true'
>>> 'true' if False else 'false'
'false'
조건문은 참고 표현 이 아닌 문 . 이는 조건식 내에서 대 입문 pass
또는 다른 명령문을 사용할 수 없음을 의미합니다 .
>>> pass if False else x = 3
File "<stdin>", line 1
pass if False else x = 3
^
SyntaxError: invalid syntax
그러나 조건식을 사용하여 다음과 같이 변수를 지정할 수 있습니다.
x = a if True else b
조건식을 두 값 사이를 전환하는 것으로 생각하십시오. '하나의 가치 또는 다른'상황에있을 때 매우 유용하지만 그다지 많은 일을하지는 않습니다.
명령문을 사용해야하는 경우 조건식 대신 일반 if
명령문 을 사용해야합니다 .
몇 가지 이유로 인해 일부 Pythonistas는 눈살을 찌푸 리고 있음을 명심하십시오.
condition ? a : b
많은 언어 (예 : C, C ++, Go, Perl, Ruby, Java, Javascript 등) 의 기존 삼항 연산자 의 순서와 다릅니다 . 이로 인해 사람들이 Python의 " 놀랍게도 "행동은 그것을 사용합니다 (논쟁 순서를 바꿀 수도 있습니다).if
'은 실제로 유용하고 스크립트를 더 간결하게 만들 수 있지만 실제로는 코드를 복잡하게 만듭니다)당신이 명령을 기억하는데 어려움이 있다면, 큰 소리로 읽을 때, 당신은 (거의) 당신이 의미하는 것을 말한다는 것을 기억하십시오. 예를 x = 4 if b > 8 else 9
들어을 소리내어 읽습니다 x will be 4 if b is greater than 8 otherwise 9
.
공식 문서 :
f(x) = |x| = x if x > 0 else -x
수학자에게는 매우 자연스럽게 들립니다. C를 사용하는 경우를 제외하고 대부분의 경우 A와 마찬가지로 이해할 수도 있습니다.
z = 3 + x if x < y else y
입니다. 경우 x=2
와 y=1
, 그 4를 얻을 것으로 예상 할 수 있지만 실제로 1. 얻을 것이다 z = 3 + (x if x > y else y)
올바른 사용법이다.
z = 3 + x if x < y else 3 + y
하거나 조건부 ( z = 3 + (x if x < y else y)
또는 z = (x if x < y else y) + 3
)를 그룹화해야합니다.
튜플로 색인을 생성 할 수 있습니다.
(falseValue, trueValue)[test]
test
True 또는 False 를 반환해야합니다 .
항상 다음과 같이 구현하는 것이 더 안전 할 수 있습니다.
(falseValue, trueValue)[test == True]
또는 내장을 사용하여 부울 값 bool()
을 보장 할 수 있습니다 .
(falseValue, trueValue)[bool(<expression>)]
(lambda: print("a"), lambda: print("b"))[test==true]()
[]
s 안에 있는 것은 임의의 표현 일 수 있습니다. 또한 안전을 위해을 작성하여 명시 적으로 진실성을 테스트 할 수 있습니다 [bool(<expression>)]
. 이 bool()
기능은 v2.2.1부터 사용되었습니다.
True
하고 False
열쇠로 : {True:trueValue, False:falseValue}[test]
난이 덜 효율적인지 모르겠지만, 적어도 피하기 전체에게로 수행 "우아한"대 "못생긴"토론. int보다는 boolean을 다루는 모호성이 없습니다.
2.5 이전 버전의 경우 트릭이 있습니다.
[expression] and [on_true] or [on_false]
on_true
부울 값이 잘못된 경우 잘못된 결과를 줄 수 있습니다 . 1
왼쪽에서 오른쪽으로 표현을 평가할 수 있다는 이점이 있지만, 이는 내 의견으로는 더 분명합니다.
<expression 1> if <condition> else <expression 2>
a = 1
b = 2
1 if a > b else -1
# Output is -1
1 if a > b else -1 if a < b else 0
# Output is -1
에서 문서 :
조건식 (때때로 "삼항 연산자"라고도 함)은 모든 Python 작업의 우선 순위가 가장 낮습니다.
표현식은
x if C else y
먼저 조건 C ( x 아님)를 평가합니다 . 만약 C가 참이고, X는 계산되고 그 값이 리턴되고; 그렇지 않으면 y 가 평가되고 해당 값이 리턴됩니다.참조 PEP (308)를 조건식에 대한 자세한 내용은.
버전 2.5 이후 새로운 기능.
Python의 조건부 표현식 연산자는 2006 년 Python Enhancement Proposal 308의 일부로 추가되었습니다 . 형식은 일반적인 ?:
연산자와 다르며 다음과 같습니다.
<expression1> if <condition> else <expression2>
이는 다음과 같습니다.
if <condition>: <expression1> else: <expression2>
예를 들면 다음과 같습니다.
result = x if a > b else y
사용할 수있는 다른 구문 (2.5 이전 버전과 호환 가능) :
result = (lambda:y, lambda:x)[a > b]()
피연산자가 느리게 평가 됩니다.
다른 방법은 튜플을 인덱싱하는 것입니다 (대부분의 다른 언어의 조건 연산자와 일치하지 않음).
result = (y, x)[a > b]
또는 명시 적으로 구성된 사전 :
result = {True: x, False: y}[a > b]
신뢰성이 떨어지지 만 신뢰할 수있는 또 다른 방법은 사용 and
및 or
연산자입니다.
result = (a > b) and x or y
그러나이 작동하지 않습니다 x
것입니다 False
.
가능한 해결 방법은 만드는 것입니다 x
및 y
다음과 같이리스트 나 튜플을 :
result = ((a > b) and [x] or [y])[0]
또는:
result = ((a > b) and (x,) or (y,))[0]
삼항 조건을 사용하는 대신 사전을 사용하는 경우 다음과 같은 이점을 활용할 수 있습니다 get(key, default)
.
shell = os.environ.get('SHELL', "/bin/sh")
result = {1: x, 0: y}[a > b]
다른 가능한 변형이다 ( True
그리고 False
, 실제로 값이 정수 1
와 0
)
불행히도
(falseValue, trueValue)[test]
솔루션에는 단락 동작이 없습니다. 따라서 모두 falseValue
와 trueValue
관계없이 증상의 평가된다. 이 될 수있는 최적 또는 버그 (즉, 모두 trueValue
와 falseValue
방법하고 부작용을 가질 수있다).
이것에 대한 한 가지 해결책은
(lambda: falseValue, lambda: trueValue)[test]()
(승자가 알려질 때까지 실행이 지연됨)) 호출 가능 오브젝트와 호출 불가능 오브젝트간에 불일치가 발생합니다. 또한 속성을 사용할 때 경우를 해결하지 못합니다.
그리고 이야기는 계속됩니다. 언급 된 3 가지 솔루션 중에서 선택하는 것은 적어도 Зython 2.5 (더 이상 문제가되지 않음)를 사용하고 " trueValue
-false-to-false"오류 가 발생하지 않는 단락 기능을 갖는 것 사이의 절충입니다. .
if else if
.
여기서는 ternary operator
몇 가지 프로그래밍 언어의 중요한 차이점을 보여 주려고 합니다.
자바 스크립트의 삼항 연산자
var a = true ? 1 : 0;
# 1
var b = false ? 1 : 0;
# 0
루비의 삼항 연산자
a = true ? 1 : 0
# 1
b = false ? 1 : 0
# 0
스칼라의 3 차 연산자
val a = true ? 1 | 0
# 1
val b = false ? 1 | 0
# 0
R 프로그래밍의 3 진 연산자
a <- if (TRUE) 1 else 0
# 1
b <- if (FALSE) 1 else 0
# 0
파이썬의 삼항 연산자
a = 1 if True else 0
# 1
b = 1 if False else 0
# 0
Python 2.5 이상에는 구체적인 구문이 있습니다.
[on_true] if [cond] else [on_false]
오래된 파이썬에서는 삼항 연산자가 구현되지 않지만 시뮬레이션 할 수 있습니다.
cond and on_true or on_false
비록, 경우에 잠재적 인 문제가 cond
로 평가 True
하고 on_true
평가 False
한 후이 on_false
대신 반환됩니다 on_true
. 이 동작을 원하면 방법이 정상입니다. 그렇지 않으면 다음을 사용하십시오.
{True: on_true, False: on_false}[cond is True] # is True, not == True
다음과 같이 감쌀 수 있습니다.
def q(cond, on_true, on_false)
return {True: on_true, False: on_false}[cond is True]
이 방법으로 사용 :
q(cond, on_true, on_false)
모든 Python 버전과 호환됩니다.
q("blob", on_true, on_false)
반환 on_false
, 반면에 on_true if cond else on_false
돌아갑니다 on_true
. 해결 방법은 교체하는 것입니다 cond
으로 cond is not None
그 완벽한 해결책은 아니지만, 이러한 경우이다.
bool(cond)
대신에 cond is True
? 전자는의 진실성을 cond
확인하고 후자는 True
객체 와의 포인터 평등을 확인 합니다. @AndrewCecil에 의해 강조로서, "blob"
truthy하지만입니다 is not True
.
[on_false, on_True][cond is True]
표현이 짧아 질 수 있습니다.
파이썬에는 삼항 조건 연산자가 있습니까?
예. 로부터 문법 파일 :
test: or_test ['if' or_test 'else' test] | lambdef
관심있는 부분은 다음과 같습니다.
or_test ['if' or_test 'else' test]
따라서 삼항 조건부 연산의 형식은 다음과 같습니다.
expression1 if expression2 else expression3
expression3
지연 평가됩니다 (즉, expression2
부울 컨텍스트에서 false 인 경우에만 평가됨 ). 그리고 재귀 적 정의로 인해 스타일을 무기한으로 연결할 수 있습니다 (불량한 스타일로 간주 될 수 있음).
expression1 if expression2 else expression3 if expression4 else expression5 # and so on
모든 if
뒤에는가 와야합니다 else
. 리스트 이해와 생성자 표현을 배우는 사람들은 이것이 배우기 어려운 교훈이라는 것을 알 수 있습니다. 파이썬은 다른 것에 대한 세 번째 표현을 기대하기 때문에 다음은 효과가 없습니다.
[expression1 if expression2 for element in iterable]
# ^-- need an else here
을 발생 SyntaxError: invalid syntax
시킵니다. 따라서 위의 내용은 불완전한 논리 (아마도 사용자가 잘못된 조건에서 no-op를 기대할 것임)이거나 expression2를 필터로 사용하려는 것일 수 있습니다. 다음은 합법적 인 Python입니다.
[expression1 for element in iterable if expression2]
expression2
목록 이해를위한 필터로 작동 하며 삼항 조건 연산자 가 아닙니다 .
다음을 작성하는 것이 다소 고통 스러울 수 있습니다.
expression1 if expression1 else expression2
expression1
위의 사용법으로 두 번 평가해야합니다. 단순히 로컬 변수 인 경우 중복성을 제한 할 수 있습니다. 그러나이 유스 케이스에 대해 일반적이고 성능이 뛰어난 파이썬 이디엄은 or
바로 가기 동작 을 사용 하는 것입니다.
expression1 or expression2
의미론과 동일합니다. 일부 스타일 가이드는 명확성을 이유로이 사용법을 제한 할 수 있습니다.이 구문은 구문에 거의 의미가 없습니다.
expression1 or expression2
expression1 || expression2
자바 스크립트에서 와 유사하고 동일한 단점 / 양성으로
expressionN
모든 인스턴스에 대해 metasyntactic 을 사용하는 것이 일관되지만 조건부 테스트 표현식을 두 개의 결과 표현식과 구분하는 이름 지정으로 이해하는 것이 더 쉬울 수 있습니다. 예를 들어, result1 if condition else result2
. 이것은 중첩 (일명 체인) 일 때 특히 분명 result1 if condition1 else result2 if condition2 else result3
합니다. 이 방법으로 읽는 것이 얼마나 더 좋은지보십시오?
파이썬 삼항 연산자 시뮬레이션.
예를 들어
a, b, x, y = 1, 2, 'a greather than b', 'b greater than a'
result = (lambda:y, lambda:x)[a > b]()
산출:
'b greater than a'
result = (y, x)[a < b]
를 사용하지 않습니까? lambda
3 차 조건부 연산자를 사용하면 코드를 간결하게 만드는 여러 줄을 대신하여 한 줄로 조건을 테스트 할 수 있습니다.
[on_true] if [expression] else [on_false]
# Program to demonstrate conditional operator
a, b = 10, 20
# Copy value of a in min if a < b else copy b
min = a if a < b else b
print(min) # Output: 10
# Python program to demonstrate ternary operator
a, b = 10, 20
# Use tuple for selecting an item
print( (b, a) [a < b] )
# Use Dictionary for selecting an item
print({True: a, False: b} [a < b])
# lamda is more efficient than above two methods
# because in lambda we are assure that
# only one expression will be evaluated unlike in
# tuple and Dictionary
print((lambda: b, lambda: a)[a < b]()) # in output you should see three 10
# Python program to demonstrate nested ternary operator
a, b = 10, 20
print ("Both a and b are equal" if a == b else "a is greater than b"
if a > b else "b is greater than a")
위의 접근 방식은 다음과 같이 작성할 수 있습니다.
# Python program to demonstrate nested ternary operator
a, b = 10, 20
if a != b:
if a > b:
print("a is greater than b")
else:
print("b is greater than a")
else:
print("Both a and b are equal")
# Output: b is greater than a
if-else
은 실제로 삼항 연산자를 다시 쓰지 않으며 a 및 b의 선택 값에 대해 다른 출력을 생성합니다 (특히 이상한 __ne__
메서드 를 구현하는 유형 인 경우 ).
당신은 이것을 할 수 있습니다 :-
[condition] and [expression_1] or [expression_2] ;
예:-
print(number%2 and "odd" or "even")
숫자가 홀수이면 "홀수"로 표시되고 짝수이면 "짝수"로 인쇄됩니다.
참고 : -0, None, False, emptylist, emptyString은 False로 평가됩니다. 그리고 0 이외의 데이터는 True로 평가됩니다.
조건 [condition]이 "True"가되면 expression_1은 평가되지만 expression_2는 평가되지 않습니다. 우리가 0으로 무언가를 "그리고"한다면 결과는 항상 희미 해 질 것입니다.
0 and exp
0을 가진 "and"는 항상 0으로 평가되고 expression을 평가할 필요가 없으므로 표현식 exp는 전혀 평가되지 않습니다. 이것은 모든 언어에서 컴파일러 자체가 작동하는 방식입니다.
에
1 or exp
1을 가진 "또는"이 항상 1이므로 표현식 exp는 전혀 평가되지 않습니다. 따라서 결과가 1이되기 때문에 표현식 exp를 평가하는 것은 귀찮지 않습니다. (컴파일러 최적화 방법).
그러나
True and exp1 or exp2
True and exp1
exp1이 false가 아닌 경우 True 이기 때문에 두 번째 표현식 exp2는 평가 되지 않습니다.
마찬가지로
False and exp1 or exp2
False가 0을 작성하는 것과 같고 0을 사용하여 "and"를 수행하는 것은 0 자체이지만 exp1 이후에는 "or"가 사용되므로 exp1 표현식은 평가되지 않습니다.
참고 :- "or"및 "and"를 사용하는 이런 종류의 분기는 expression_1이 False (또는 0 또는 None 또는 emptylist [] 또는 emptystring '')가 아닌 경우 expression_1이되는 경우에만 사용할 수 있습니다. False이면 exp_1과 exp_2 사이의 "또는"존재로 인해 expression_2가 평가됩니다.
exp_1 및 exp_2 true 값이 무엇이든 관계없이 모든 경우에 여전히 작동하게하려면 다음을 수행하십시오.
[condition] and ([expression_1] or 1) or [expression_2] ;
x = [condition] and ([expression_1] or 1) or [expression_2]
와 expression_1
false로 평가, x
것 1
,하지 expression_1
. 허용 된 답변을 사용하십시오.
대답보다 팁이 더 많지만 (이런 시간에 명백한 것을 반복 할 필요는 없지만) 때로는 그러한 구성에서 oneliner 지름길로 사용합니다.
if conditionX:
print('yes')
else:
print('nah')
다음과 같이됩니다.
print('yes') if conditionX else print('nah')
일부 (많은 :)는 비언어적 인 것으로 찌를 수도 있지만 (루비 -ish :) 개인적으로 더 자연 스럽습니다. 즉, 정상적으로 표현하는 방법과 큰 코드 블록에서 시각적으로 호소력이 있습니다.
print( 'yes' if conditionX else 'nah' )
당신의 대답보다 선호 합니다. :-)
print()
두 경우 모두 를 원한다면 -그리고 좀 더 파이썬처럼 보인다면, 나는 인정해야합니다 :) 그러나 표현 / 기능이 동일하지 않은 경우-같은 print('yes') if conditionX else True
- print()
진실을 유일 하게 얻으려면conditionX
print('yes') if conditionX else print('nah')
는 Python2에서 SyntaxError를 제공한다는 것입니다.
print "yes"
인 반면 Python 3에서는 함수이기 때문입니다 print("yes")
. 이를 문장으로 사용하거나 더 나은 방법으로 해결할 수 있습니다 from future import print_function
.
파이썬의 조건식 에 대한 대안 중 하나
"yes" if boolean else "no"
다음과 같습니다.
{True:"yes", False:"no"}[boolean]
다음과 같은 멋진 확장 기능이 있습니다.
{True:"yes", False:"no", None:"maybe"}[boolean_or_none]
가장 짧은 대안은 다음과 같습니다.
("no", "yes")[boolean]
그러나 대안이 없습니다
yes() if boolean else no()
당신의 평가를 피하려는 경우 yes()
와 no()
,에 있기 때문에
(no(), yes())[boolean] # bad
모두 no()
와 yes()
평가된다.
C
일반적으로 파생 된 많은 프로그래밍 언어 에는 다음과 같은 삼항 조건 연산자 구문이 있습니다.
<condition> ? <expression1> : <expression2>
처음에는
Python
B의 enevolent의 D의 ictator F 또는 L의 가 사용되지 사람들을 이해하는 것은 매우 어렵다 이후 IFE는 (비 파이썬 스타일 등)을 거부 (나는 귀도 반 로섬 (Guido van Rossum)은 물론 평균)C
언어. 또한 콜론 부호는:
이미 여러 용도로 사용됩니다Python
. PEP 308 이 승인 된 후Python
마침내 자체 단축 조건식 (현재 사용중인 것)을 받았습니다.
<expression1> if <condition> else <expression2>
따라서 먼저 조건을 평가합니다. 이 값을 반환 True
하면 expression1 이 평가되어 결과가 제공되고, 그렇지 않으면 expression2 가 평가됩니다. 지연 평가 메커니즘 으로 인해 하나의 표현식 만 실행됩니다.
다음은 몇 가지 예입니다 (조건은 왼쪽에서 오른쪽으로 평가됨).
pressure = 10
print('High' if pressure < 20 else 'Critical')
# Result is 'High'
삼항 연산자는 직렬로 연결할 수 있습니다.
pressure = 5
print('Normal' if pressure < 10 else 'High' if pressure < 20 else 'Critical')
# Result is 'Normal'
다음은 이전과 동일합니다.
pressure = 5
if pressure < 20:
if pressure < 10:
print('Normal')
else:
print('High')
else:
print('Critical')
# Result is 'Normal'
도움이 되었기를 바랍니다.
이미 대답했듯이, 파이썬에는 삼항 연산자가 있습니다.
<expression 1> if <condition> else <expression 2>
추가 정보:
짧은<expression 1>
조건 평가를 사용할 수있는 조건 인 경우 :
a = True
b = False
# Instead of this:
x = a if a else b
# You could use Short-cirquit evaluation:
x = a or b
추신 : 물론, 단기 간 평가는 삼항 연산자가 아니지만 단락이 충분할 경우 삼항이 사용되는 경우가 많습니다.
short-circuit
평가에 대한 찬성 .
예, 파이썬에는 삼항 연산자가 있습니다. 구문과 예제 코드는 동일합니다. :)
#[On true] if [expression] else[On false]
# if the expression evaluates to true then it will pass On true otherwise On false
a= input("Enter the First Number ")
b= input("Enter the Second Number ")
print("A is Bigger") if a>b else print("B is Bigger")
print
Python2에서 SyntaxError가 발생하기 때문에 실제로는 좋은 선택이 아닙니다.
파이썬은 과제에 대한 삼항 형식을 가지고 있습니다. 그러나 사람들이 알아야 할 짧은 형식이있을 수도 있습니다.
조건에 따라 변수에 하나 이상의 값을 할당해야하는 것이 매우 일반적입니다.
>>> li1 = None
>>> li2 = [1, 2, 3]
>>>
>>> if li1:
... a = li1
... else:
... a = li2
...
>>> a
[1, 2, 3]
^ 이것은 그러한 과제를 수행하기위한 긴 형식입니다.
아래는 삼항 형식입니다. 그러나 이것은 가장 간결한 방법은 아닙니다. 마지막 예를 참조하십시오.
>>> a = li1 if li1 else li2
>>>
>>> a
[1, 2, 3]
>>>
Python을 사용 or
하면 대체 할당에 간단히 사용할 수 있습니다 .
>>> a = li1 or li2
>>>
>>> a
[1, 2, 3]
>>>
때문에 위의 작품 li1
이다 None
그 논리 표현식에서 거짓으로하고 보정시 취급합니다. 그런 다음 interp은 계속 진행하여 두 번째 표현식을 평가합니다. 두 번째 표현식 None
은 비어 있고 목록이 아니므로 a에 지정됩니다.
이것은 빈 목록에서도 작동합니다. 예를 들어 a
항목이있는 목록 을 지정하려는 경우 .
>>> li1 = []
>>> li2 = [1, 2, 3]
>>>
>>> a = li1 or li2
>>>
>>> a
[1, 2, 3]
>>>
이것을 알면, 그러한 과제가 발생할 때마다 간단하게 그러한 과제를 할 수 있습니다. 이것은 또한 문자열과 다른 이터 러블과도 작동합니다. a
비어 있지 않은 문자열을 할당 할 수 있습니다.
>>> s1 = ''
>>> s2 = 'hello world'
>>>
>>> a = s1 or s2
>>>
>>> a
'hello world'
>>>
나는 항상 C 삼항 구문을 좋아했지만 파이썬은 한 걸음 더 나아갑니다!
일부 개발자는 이것이 모든 개발자에게 즉시 드러나지 않는 역학에 의존하기 때문에 이것이 좋은 문체 선택이 아니라고 말할 수도 있습니다. 나는 개인적으로 그 견해에 동의하지 않습니다. 파이썬은 관용구에게 즉시 명백하지 않은 많은 관용적 트릭을 가진 구문이 풍부한 언어입니다. 그러나 기본 시스템의 메커니즘을 더 많이 배우고 이해할수록 더 감사합니다.
다른 답변은 Python 삼항 연산자에 대해 올바르게 이야기합니다. 삼항 연산자가 자주 사용되지만 더 좋은 관용구가있는 시나리오를 언급하여 보완하고 싶습니다. 이것이 기본값을 사용하는 시나리오입니다.
option_value
설정되지 않은 경우 기본값 으로 사용한다고 가정 합니다.
run_algorithm(option_value if option_value is not None else 10)
또는 단순히
run_algorithm(option_value if option_value else 10)
그러나 더 나은 해결책은 간단히 작성하는 것입니다.
run_algorithm(option_value or 10)
변수가 정의되어 있고 값이 있는지 확인하려는 경우 a or b
def test(myvar=None):
# shorter than: print myvar if myvar else "no Input"
print myvar or "no Input"
test()
test([])
test(False)
test('hello')
test(['Hello'])
test(True)
출력합니다
no Input
no Input
no Input
hello
['Hello']
True
x if x else y
는 있지만 작동 하지는 않습니다 x if z else y
.
기본 파이썬 구문이 번거롭기 val = a if cond else b
때문에 때로는 이렇게합니다.
iif = lambda (cond, a, b): a if cond else b
# so I can then use it like:
val = iif(cond, a, b)
물론, 그것은 항상 양쪽 (a와 b)을 평가하는 단점이 있지만 구문은 나에게 더 명확합니다.
val = a if cond else b
.