source

Python에는 3진수 조건 연산자가 있나요?

lovecheck 2023. 2. 1. 21:53
반응형

Python에는 3진수 조건 연산자가 있나요?

Python에 3진수 조건 연산자가 있나요?

네, 버전 2.5에서 추가되었습니다.식 구문은 다음과 같습니다.

a if condition else b

번째 번째condition 하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다 중 하나를 합니다.a ★★★★★★★★★★★★★★★★★」b부울값을 기반으로 평가되어 반환됩니다.condition.conditionTrue , , , 「 」a만, 「」라고 하는 것은,b당합니다.그렇지 않으면b만, 「」라고 하는 것은,a시됩니니다다

이 발생할 수 .왜냐하면condition일 뿐이다.a되어 「」가 됩니다.b만, 「」는 평가되지 않습니다.condition only false(false만)b되어 「」가 됩니다.a전혀 평가되지 않습니다.

예를 들어 다음과 같습니다.

>>> 'true' if True else 'false'
'true'
>>> 'true' if False else 'false'
'false'

조건식은 표현식이지 이 아닙니다.즉, 다음과 같은 문장은 사용할 수 없습니다.pass " " " 와의 =('배정과 같은)+=)는, 조건식내에서 다음과 같이 됩니다.

>>> pass if False else pass
  File "<stdin>", line 1
    pass if False else pass
         ^
SyntaxError: invalid syntax

>>> # Python parses this as `x = (1 if False else y) = 2`
>>> # The `(1 if False else x)` part is actually valid, but
>>> # it can't be on the left-hand side of `=`.
>>> x = 1 if False else y = 2
  File "<stdin>", line 1
SyntaxError: cannot assign to conditional expression

>>> # If we parenthesize it instead...
>>> (x = 1) if False else (y = 2)
  File "<stdin>", line 1
    (x = 1) if False else (y = 2)
       ^
SyntaxError: invalid syntax

에서는 (3.8):="walrus" 연산자는 식으로서 값을 간단히 할당할 수 있으며, 이는 이 구문과 호환됩니다.하지만 코드를 그렇게 쓰지 마세요. 금방 이해하기 어려워질 거예요.)

마찬가지로에, 「이러다」는, 「이러한 표현else부품은 필수입니다.

# Invalid syntax: we didn't specify what the value should be if the 
# condition isn't met. It doesn't matter if we can verify that
# ahead of time.
a if True

단, 조건식을 사용하여 다음과 같은 변수를 할당할 수 있습니다.

x = a if True else b

또는 예를 들어 값을 반환하는 경우:

# Of course we should just use the standard library `max`;
# this is just for demonstration purposes.
def my_max(a, b):
    return a if a > b else b

조건식은 두 값 사이에서 전환되는 것으로 간주합니다.조건이 충족되는지 여부에 관계없이 결과에 대해 동일한 작업을 수행하는 '하나의 값 또는 다른 값' 상황에 있을 때 사용할 수 있습니다.이 식을 사용하여 값을 계산하고 그 값을 사용하여 무엇인가를 수행합니다.컨디션에 따라 다른 을 해야 할 경우에는 일반을 사용합니다.if 대신 스테이트먼트를 입력합니다.


일부 Pythonista는 다음과 같은 이유로 이 제품을 비난하고 있습니다.

  • condition ? a : b다른 많은 언어(C, C++, Go, Perl, Ruby, Java, JavaScript )의 3진 연산자는 파이썬의 "놀라운" 행동에 익숙하지 않은 사람들이 그것을 사용할 때 버그로 이어질 수 있다(인수의 순서를 바꿀 수도 있다).
  • 어떤 사람들은 그것이 정상적인 생각의 흐름과 반대되기 때문에 "어쩔 수 없다"고 생각한다.
  • 인 이유.'은 ''이지만if는 매우 편리합니다.또, 스크립트를 보다 간결하게 하기 위해서, 코드를 복잡하게 합니다.)

순서를 기억하는 데 문제가 있는 경우, 큰 소리로 읽으면 무슨 뜻인지 말할 수 있다는 것을 기억하십시오.를 들어, 「」라고 하는 것은,x = 4 if b > 8 else 9라고 읽히다x will be 4 if b is greater than 8 otherwise 9.

공식 문서:

다음과 같이 태플에 인덱스를 붙일 수 있습니다.

(falseValue, trueValue)[test]

test는 True 또는 False를 반환해야 합니다.
항상 다음과 같이 구현하는 것이 더 안전할 수 있습니다.

(falseValue, trueValue)[test == True]

또는 빌트인을 사용하여 부울 을 확인할 수 있습니다.

(falseValue, trueValue)[bool(<expression>)]

2.5 이전 버전에서는 다음과 같은 이점이 있습니다.

[expression] and [on_true] or [on_false]

경우 잘못된 수 .on_true에 잘못된 부울 1값이 있습니다.

표현을 좌우로 평가하는 장점이 있긴 하지만, 제 생각에는 더 명확합니다.

1. C의 3진 연산자와 동등한 연산자가 있습니까?

<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

매뉴얼에서 다음 항목을 참조하십시오.

조건식('3진 연산자'라고도 함)은 모든 Python 연산자 중 가장 낮은 우선순위를 가집니다.

.x if C else y먼저 조건 C(x가 아님)를 평가합니다.C가 참일 경우 x가 평가되고 값이 반환됩니다.그렇지 않을 경우 y가 평가되고 값이 반환됩니다.

조건식에 대한 자세한 내용은 PEP 308을 참조하십시오.

버전 2.5 이후 새로운 기능

Python의 조건식 연산자는 Python Enhancement Proposal 308의 일부로 2006년에 추가되었습니다.그 형태는 일반과 다르다.?:★★★★★★★★★★★★★★★★★★:

<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

xFalse.

할 수 있는 으로는 '다 하다'를 들 수 .x ★★★★★★★★★★★★★★★★★」y을 표시합니다.

result = ((a > b) and [x] or [y])[0]

또는 다음과 같이 입력합니다.

result = ((a > b) and (x,) or (y,))[0]

사전을 사용하는 경우 3진 조건어를 사용하는 대신 다음과 같은 이점을 얻을 수 있습니다.

shell = os.environ.get('SHELL', "/bin/sh")

출처: Wikipedia의 Python에서 ?:

아쉽게도

(falseValue, trueValue)[test]

에 둘 다 단락 거동이 없습니다.라서서둘둘둘falseValue ★★★★★★★★★★★★★★★★★」trueValue이치노도 있고 심지어 수도 다 그렇다).trueValue ★★★★★★★★★★★★★★★★★」falseValue방법이 될 수 있고 부작용이 있을 수 있습니다.)

이에 대한 한 가지 해결책은

(lambda: falseValue, lambda: trueValue)[test]()

(당첨자를 알 수 있을 때까지 지연됩니다). 단, 콜 가능 객체와 콜 불가능 객체 사이에 불일치가 발생합니다.게다가, 그것은 부동산을 사용할 때 사건을 해결하지 못한다.

중 은, 2.5이상 를과 Python2를 하는 것 입니다.trueValue 에러 에러, 에러, 에러, 에러, 에러, 에러, 에러, 에러, 에러, 에러, 에러, 에러, 에러.

다른 프로그래밍 언어의 3진 연산자

여기에서는, 몇개의 프로그래밍 언어간의 3진 연산자의 중요한 차이점을 나타내려고 합니다.

JavaScript의 Ternary 연산자

var a = true ? 1 : 0;
# 1
var b = false ? 1 : 0;
# 0

루비의 삼진 연산자

a = true ? 1 : 0
# 1
b = false ? 1 : 0
# 0

스칼라의 삼원 연산자

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

Python의 Ternary 연산자

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

인 문제가 , 만약 가 있다면, 문제가 있다.condTrue ★★★★★★★★★★★★★★★★★」on_trueFalseon_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 버전과 호환됩니다.

흔히 볼 수 있다

cond and on_true or on_false

단, on_true ==0일 경우 문제가 발생합니다.

>>> x = 0
>>> print x == 0 and 0 or 1
1
>>> x = 1
>>> print x == 0 and 0 or 1
1

일반 3진 연산자에 대해 이 결과를 예상할 수 있는 위치:

>>> x = 0
>>> print 0 if x == 0 else 1
0
>>> x = 1
>>> print 0 if x == 0 else 1
1

Python에는 3진수 조건 연산자가 있나요?

, 문법 파일에서:

test: or_test ['if' or_test 'else' test] | lambdef

관심사는 다음과 같습니다.

or_test ['if' or_test 'else' test]

따라서 삼원 조건부 연산은 다음과 같은 형식입니다.

expression1 if expression2 else expression3

expression3됩니다(은 (비록, 하다, 하다)expression2거짓또한 재귀 정의로 인해 잘못된 스타일로 간주될 수 있지만 무기한으로 체인을 구성할 수 있습니다.

expression1 if expression2 else expression3 if expression4 else expression5 # and so on

사용법에 관한 주의사항:

각 항목에 해 주십시오.if에는 반드시 '아까운'이 합니다.else리스트의 이해와 생성기 식을 학습하는 사람들은 이것이 배우기 어려운 교훈이라고 생각할 수 있습니다.Python은 다른 표현에 대해 세 번째 표현을 기대하고 있기 때문에 다음 표현은 작동하지 않습니다.

[expression1 if expression2 for element in iterable]
#                          ^-- need an else here

에, 「이러다」라고 하는 것은,SyntaxError: invalid syntax 위의 이거나 의도된 은 ""을 사용하는 expression2파이톤

[expression1 for element in iterable if expression2]

expression2는 목록 이해용 필터로 기능하며 3진수 조건부 연산자가 아닙니다.

보다 좁은 대소문자의 대체 구문:

다음과 같이 쓰는 것이 다소 고통스러울 수 있습니다.

expression1 if expression1 else expression2

expression1상기 사용법을 사용하여 두 번 평가해야 합니다.단순히 로컬 변수일 경우 용장성을 제한할 수 있습니다.이 되는 피톤어 는 피톤어를 사용하는 입니다.or컷컷: :

expression1 or expression2

의미론적으로 동등합니다.일부 스타일 가이드는 명확성을 이유로 이 용도를 제한할 수 있습니다.이러한 문법은 많은 의미를 매우 작은 구문에 담고 있습니다.

Python의 조건식에 대한 대안 중 하나

"yes" if boolean else "no"

는 다음과 같습니다.

{True: "yes", False: "no"}[boolean]

다음과 같이 확장되어 있습니다.

{True: "yes", False: "no", None: "maybe"}[boolean_or_none]

가장 짧은 대안이 남아 있다.

("no", "yes")[boolean]

그 이유는issubclass(bool, int).

단, 주의: 대체 수단

yes() if boolean else no()

아니다

(no(), yes())[boolean]  # bad: BOTH no() and yes() are called

그렇지만

(no, yes)[boolean]()

은 잘 작동한다.no ★★★★★★★★★★★★★★★★★」yes이치노않은 : 「 」)

yes("ok") if boolean else no()  # (1)

또는 인

yes("ok") if boolean else no("sorry")  # (2)

유사한 대안이 존재하지 않거나, 실행 가능성이 거의 없다. ( 드문 경우, 상황에 따라, 다음과 같은 것)

msg = ("sorry", "ok")[boolean]
(no, yes)[boolean](msg)

이치에 맞다고 생각합니다.)

Radek Rojik의 코멘트 덕분이다.

이미 대답한 바와 같이, Python에는 3진 연산자가 있습니다.

<expression 1> if <condition> else <expression 2>

, 「 」<expression 1> evaluated 에도 됩니다.<condition>그러면 단락 평가를 사용할 수 있습니다.

a = 0
b = 1

# Instead of this:
x = a if a else b
# Evaluates as 'a if bool(a) else b'

# You could use short-circuit evaluation:
x = a or b

단락 평가의 큰 장점 중 하나는 두 개 이상의 식을 연결할 수 있다는 것입니다.

x = a or b or c or d or e

기능을 사용할 경우 세부적으로 더 다릅니다.

# Evaluating functions:
def foo(x):
    print('foo executed')
    return x


def bar(y):
    print('bar executed')
    return y


def blubb(z):
    print('blubb executed')
    return z


# Ternary Operator expression 1 equals to False
print(foo(0) if foo(0) else bar(1))
''' foo and bar are executed once
foo executed
bar executed
1
'''

# Ternary Operator expression 1 equals to True
print(foo(2) if foo(2) else bar(3))
''' foo is executed twice!
foo executed
foo executed
2
'''

# Short-circuit evaluation second equals to True
print(foo(0) or bar(1) or blubb(2))
''' blubb is not executed
foo executed
bar executed
1
'''

# Short-circuit evaluation third equals to True
print(foo(0) or bar(0) or blubb(2))
'''
foo executed
bar executed
blubb executed
2
'''

# Short-circuit evaluation all equal to False
print(foo(0) or bar(0) or blubb(0))
''' Result is 0 (from blubb(0)) because no value equals to True
foo executed
bar executed
blubb executed
0
'''

추신: 물론, 단락 평가는 3진 연산자는 아니지만, 단락으로 충분할 경우 3진 연산자를 사용하는 경우가 많습니다.가독성이 향상되어 체인으로 접속할 수 있습니다.

Python 3진 연산자를 시뮬레이션합니다.

예를들면

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'
a if condition else b

기억하기 어렵다면 이 피라미드를 외우세요.

     condition
  if           else
a                   b 

3진수 조건부 연산자는 여러 줄의 if-else를 대체하여 한 줄의 조건을 테스트하는 것만으로 코드를 압축할 수 있습니다.

구문:

[ on _ true ]그렇지 않으면 [ on _ false ]

1-삼진 연산자를 사용하는 간단한 방법:

# 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

2- 튜플, 사전 및 람다를 직접 사용하는 방법:

# 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])
# lambda 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

3- 3진 연산자는 내포 if-else로 쓸 수 있습니다.

# 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 conditionX:
    print('yes')
else:
    print('nah')

는 다음과 같습니다.

print('yes') if conditionX else print('nah')

일부(많은 수:)는 비조화(Ruby-ish 수:도)라고 생각할지 모르지만, 저는 개인적으로 더 자연스럽다고 생각합니다.즉, 당신이 그것을 보통으로 표현하는 방법, 그리고 큰 코드 블록에서 시각적으로 조금 더 매력적입니다.

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

[condition] and [expression_1] or [expression_2];

예:

print(number%2 and "odd" or "even")

번호가 홀수일 경우 홀수, 짝수일 경우 짝수로 출력됩니다.


그 결과:조건이 true이면 exp_1이 실행되고 그렇지 않으면 exp_2가 실행됩니다.

주의: 0, None, False, emptylist 및 emptyString은 False로 평가됩니다.

0 이외의 데이터는 True로 평가됩니다.

동작 방법은 다음과 같습니다.

조건 [condition]이 "True"가 되면 expression_1이 평가되지만 expression_2는 평가되지 않습니다.

0으로 「및」을 지정하면, 결과는 항상 false가 됩니다.그래서 아래 문장에서

0 and exp

exp는 0이 있는 "and"는 항상 0으로 평가되며 식을 평가할 필요가 없기 때문에 전혀 평가되지 않습니다.모든 언어로 컴파일러 자체가 이렇게 동작합니다.

1 or exp

exp는 "또는"이 1이면 항상 1이 되므로 전혀 평가되지 않습니다.따라서 exp라는 식을 계산할 필요가 없습니다.이는 결과가 1(컴파일러 최적화 방식)이기 때문입니다.

하지만 만약의 경우

True and exp1 or exp2

식 는 exp2가 아니라서 True and exp1falseexp1이 false가 경우 .

에서도 마찬가지로

False and exp1 or exp2

exp1은 False는 0을 쓰는 것과 같기 때문에 평가되지 않으며 0을 사용하여 "and"를 수행하는 것 자체는 0이 됩니다. 그러나 exp1을 사용하면 "or" 뒤에 식 exp2가 평가됩니다.


주의: expression_1이 False가 되면 expression_1과 exp_2 사이에 "or"가 존재하기 때문에 expression_2가 False의 True 값(또는 0 또는 None 또는 빈 목록 [ ] 또는 빈 문자열 '.)이 없는 경우에만 expression_2를 사용할 수 있습니다.

exp_1 및 exp_2의 true 값에 관계없이 모든 경우에 대해 이 값을 계속 사용할 수 있도록 하려면 다음 절차를 수행합니다.

[condition] and ([expression_1] or 1) or [expression_2];

Vinko Vrsalovic의 대답은 충분히 좋다.한가지 더 있습니다.

조건식은 표현식이지 이 아닙니다.즉, 할당문을 사용할 수 없습니다.pass또는 조건식 내의 다른 문장

Python 3.8의 Walrus 연산자

바다코끼리 연산자가 Python 3.8에 도입된 후, 뭔가 변화가 있었습니다.

(a := 3) if True else (b := 5)

a = 3 ★★★★★★★★★★★★★★★★★」b is not defined ,

(a := 3) if False else (b := 5)

a is not defined ★★★★★★★★★★★★★★★★★」b = 5 , 그리고.

c = (a := 3) if False else (b := 5)

c = 5,a is not defined ★★★★★★★★★★★★★★★★★」b = 5.

이것이 보기 흉하더라도 Python 3.8 이후 조건식 내에서 할당가능합니다.어쨌든, 그래도 일반을 사용하는 것이 낫다.if 대신 스테이트먼트를 입력합니다.

C에서 파생된 많은 프로그래밍 언어에는 보통 3진수 조건부 연산자의 구문이 다음과 같습니다.

<condition> ? <expression1> : <expression2>

처음에 파이썬의 자비로운 독재자(물론 귀도 반 로섬)는 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'

3진 연산자를 직렬로 연결할 수 있습니다.

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'

, Python에는 3진 연산자가 있습니다.구문과 같은 것을 나타내는 코드 예를 다음에 나타냅니다.

#[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")

다른 답변은 Python 3진 연산자에 대해 올바르게 설명합니다.3진 연산자가 자주 쓰이지만 더 좋은 관용구가 있는 시나리오를 언급함으로써 보완하고 싶다.이것은 기본값을 사용하는 시나리오입니다.

를 들어, 우리가 ''를 사용하려고 하면요.option_value디폴트값이 설정되어 있지 않은 경우는, 다음과 같이 설정합니다.

run_algorithm(option_value if option_value is not None else 10)

「」의 는,option_value 거짓값으로 되지 않습니다(허위 값).0,""을 참조해 주세요.

run_algorithm(option_value if option_value else 10)

단, 이 경우 더 나은 해결책은 단순히 다음을 작성하는 것입니다.

run_algorithm(option_value or 10)

Python의 3진 연산자 구문은 다음과 같습니다.

[on_true] if [expression] else [on_false]

이 구문을 사용하여 Python의 3진 연산자를 사용하여 위의 코드를 다시 쓰는 방법은 다음과 같습니다.

game_type = 'home'
shirt = 'white' if game_type == 'home' else 'green'

아직 꽤 명확하지만, 훨씬 짧다.이 표현은 함수 호출을 포함하여 True 또는 False로 평가되는 값을 반환하는 모든 유형의 표현입니다.

Python은 할당에 대한 3원 형식을 가지고 있지만, 사람들이 알아야 할 더 짧은 형식이 있을 수 있습니다.

조건에 따라 변수에 값을 하나 또는 다른 값으로 할당해야 하는 경우가 많습니다.

>>> 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을 Python을 쉽게 할 수 .or대체 할당에 사용합니다.

>>> a = li1 or li2
>>>
>>> a
[1, 2, 3]
>>>

위 내용은 이후부터 유효합니다.li1None거짓두 를 하는데, 두 번째 표현은 .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 ternary 구문은 항상 마음에 들었지만 Python은 한 단계 더 나아갑니다!

이것은 모든 개발자가 즉시 알 수 없는 메커니즘에 의존하기 때문에 스타일리시한 선택이 아니라고 말하는 사람도 있을 것입니다.나는 개인적으로 그 관점에 동의하지 않는다.Python은 구문이 풍부한 언어이며, 많은 관용적인 속임수를 가지고 있는데, 이것은 Dabbler에게는 바로 드러나지 않는다.하지만 기본 시스템의 구조를 더 많이 배우고 이해할수록 더 많은 것을 인식하게 됩니다.

비토닉식 방법:

"true" if var else "false"

그러나 3원 조건을 실행하는 방법에는 항상 다른 방법이 다릅니다.

"true" and var or "false"

여러 가지 방법이 있습니다.가장 간단한 방법은 "인쇄" 방식 내부의 조건을 사용하는 것입니다.

사용할 수 있습니다.

print("Twenty" if number == 20 else "Not twenty")

즉, 다음과 같습니다.

if number == 20:
    print("Twenty")
else:
    print("Not twenty")

이 방법으로, 3개 이상의 스테이트먼트를 인쇄할 수도 있습니다.예를 들어 다음과 같습니다.

if number == 20:
    print("Twenty")
elif number < 20:
    print("Lesser")
elif 30 > number > 20:
    print("Between")
else:
    print("Greater")

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

print("Twenty" if number == 20 else "Lesser" if number < 20 else "Between" if 30 > number > 20 else "Greater")

if else-if 버전은 다음과 같이 기술할 수 있습니다.

sample_set="train" if "Train" in full_path else ("test" if "Test" in full_path else "validation")

와 같은 언어, C-syntax, C-syntax)와는 다릅니다.condition ? value_if_true : value_if_false

파이썬value_if_true if condition else value_if_false

::even_or_odd = "even" if x % 2 == 0 else "odd"

여러 연산자를 연결하는 깔끔한 방법:

f = lambda x,y: 'greater' if x > y else 'less' if y > x else 'equal'

array = [(0,0),(0,1),(1,0),(1,1)]

for a in array:
  x, y = a[0], a[1]
  print(f(x,y))

# Output is:
#   equal,
#   less,
#   greater,
#   equal

구문 "Python"을 .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)을 평가해야 하는 단점도 있지만, 구문이 훨씬 명확합니다.

언급URL : https://stackoverflow.com/questions/394809/does-python-have-a-ternary-conditional-operator

반응형