복붙노트

[PYTHON] 부울 식을 사용하여 문자열 지정 [duplicate]

PYTHON

부울 식을 사용하여 문자열 지정 [duplicate]

다른 사람의 프로젝트에서이 코드를 이해하려고합니다. 컨텍스트를 원할 경우 https://github.com/newsapps/beeswithmachineguns/blob/master/beeswithmachineguns/bees.py#L501 페이지를 참조하십시오.

IS_PY2는 부울 변수이며 파이썬 주요 버전이 2이면 True입니다. 비어 있지 않은 문자열은 True라는 것을 알고 있지만, 어떤 이유로 openmode가 True 또는 False가 아닌 'w'또는 'wt'중 하나가 할당된다는 것을 이해하지 못합니다.

openmode = IS_PY2 and 'w' or 'wt'
openkwargs = IS_PY2 and {} or {'encoding': 'utf-8', 'newline': ''}

누군가 결과를 설명해 주시겠습니까?

해결법

  1. ==============================

    1.삼항 부울 표현식은 다음과 같이 작동합니다.

    삼항 부울 표현식은 다음과 같이 작동합니다.

    >>> 2 and 3 or 4
    3
    >>> 0 and 3 or 4
    4
    

    그래서,이 표현식은 :

    openmode = IS_PY2 and 'w' or 'wt'
    

    파이썬 2에 가입하십시오 :

    openmode = True and 'w' or 'wt'
    

    어느 것과 같은가?

    openmode = 'w' or 'wt'
    

    그래서 나는 w를 준다.

    파이썬 3에서 IS_PY2는 False이고 다음을 제공합니다.

    openmode = False and 'w' or 'wt'
    

    어느 것과 같은가?

    openmode = False or 'wt'
    

    무게를주는.

    이 모든 것은 openmode가 바이너리가 아닌 텍스트 파일을위한 것임을 명시 적으로 지정하는 것입니다.이 바이너리는 Python2에서는 w로 표시되고 Python3에서는 wt로 표시됩니다.

    파이썬 3 모드가 기본 모드이지만, 정확하지는 않습니다.

    무게 모드에 대한 답변보기

    마지막으로, 다음은 훨씬 더 읽기 쉽다고 생각합니다.

    openmode = 'w' if IS_PY2 else 'wt'
    

    그리고 이것은 훨씬 단순합니다.

    openmode = 'w'
    
  2. ==============================

    2.and 및 / 또는 연산자는 피연산자에 부울 연산을 수행하는 것이 아니라 부울 결과를 제공합니다. 그들이 제공하는 결과는 항상 피연산자 중 하나입니다. 이 연산자는 왼쪽에서 오른쪽으로 또는에서보다 우선 순위가 더 높으며, 단락되므로 가능한 한 빨리 피연산자를 평가하지 않습니다.

    and 및 / 또는 연산자는 피연산자에 부울 연산을 수행하는 것이 아니라 부울 결과를 제공합니다. 그들이 제공하는 결과는 항상 피연산자 중 하나입니다. 이 연산자는 왼쪽에서 오른쪽으로 또는에서보다 우선 순위가 더 높으며, 단락되므로 가능한 한 빨리 피연산자를 평가하지 않습니다.

    순수한 불리언 논리에서 False와 x는 x가 무엇이든 관계없이 False이므로 x를 검사 할 필요가 없습니다. 파이썬 표현식 False와 x는 False 결과를 주며 x를 평가하지 않습니다. 따라서 False와 some_function ()은 some_function ()을 호출하지 않습니다.

    유사하게, 순수한 부울 논리의 참 및 x는 x와 동일한 진리 값을 가질 것이다. 즉, x가 참이면 참이고 x가 참이면 참이고, 그렇지 않으면 거짓이다.

    그러나 파이썬과 연산자는 임의의 피연산자를 처리 할 수 ​​있습니다.

    a와 b에서 a가 false-ish이면 b는 평가되지 않고 결과는 a입니다. a가 true-ish이면 b가 평가되어 결과가됩니다.

    다음은 Python 2를 사용한 짧은 데모입니다.

    print False and 'boolean'
    print 0 and 'integer'
    print '' and 'string'
    print [] and 'list'
    print
    
    print True and 'boolean'
    print 7 and 'integer'
    print 'a' and 'string'
    print [42] and 'list'
    print
    
    print True and False
    print True and 0
    print True and ''
    print True and []
    print
    

    산출

    False
    0
    
    []
    
    boolean
    integer
    string
    list
    
    False
    0
    
    []
    

    0과 [] 사이의 빈 줄은 빈 문자열이 인쇄되는 곳입니다.

    유사한 고려 사항이 또는 연산자에도 적용됩니다.

    순수한 불리언 논리에서 True 또는 x는 True입니다. x가 무엇이든 관계없이 또는 표현식의 첫 번째 부분이 True이면 두 번째 부분을 평가할 필요가 없습니다. 그리고 거짓 또는 x는 x의 진리 값을가집니다.

    print False or 'boolean'
    print 0 or 'integer'
    print '' or 'string'
    print [] or 'list'
    print
    
    print True or 'boolean'
    print 7 or 'integer'
    print 'a' or 'string'
    print [42] or 'list'
    print
    
    print False or False
    print False or 0
    print False or ''
    print False or []
    print
    

    산출

    boolean
    integer
    string
    list
    
    True
    7
    a
    [42]
    
    False
    0
    
    []
    

    앞에서 말했듯이,이 연산자는 왼쪽에서 오른쪽으로 평가되며, 원한다면 연결할 수 있습니다. 다음은 "고전적인"사례입니다.

    print True and 'yes' or 'no'
    print False and 'yes' or 'no'
    

    그 진술은

    print (True and 'yes') or 'no'
    print (False and 'yes') or 'no'
    

    산출

    yes
    no
    

    이 구성은 초기 버전의 Python에서 일반적이었습니다. 요즘은 if 표현식을 보는 것이 훨씬 더 일반적입니다.

    print 'yes' if True else 'no'
    print 'yes' if False else 'no'
    

    and와 or를 사용하는 삼항 표현식보다 더 읽기 쉽다고 일반적으로 간주됩니다. 또한 a와 b 또는 c는 b와 같지 않습니다. else c 인 경우 b는 false-ish입니다.

    그러나 특히 이전 코드를 읽거나 유지해야하는 경우에는이 3 진 및 ... 또는 작동 방식을 이해하는 것이 중요합니다. 일부 오래된 Pythonistas는 여전히 and ... or form을 선호합니다. 어떻게 작동하는지 이해하지 못할 때 약간 어렴풋이 나타나더라도 다소 짧습니다. :)

  3. from https://stackoverflow.com/questions/36550588/assigning-string-with-boolean-expression by cc-by-sa and MIT license