복붙노트

[PYTHON] Python`x가 None이 아닌 경우`또는`x가 None이 아닌 경우`?

PYTHON

Python`x가 None이 아닌 경우`또는`x가 None이 아닌 경우`?

나는 항상 x가 더 명확하지 않다고 생각했지만, x가 None이 아니라면 Google의 스타일 가이드와 PEP-8 둘 다 사용합니다. 사소한 성능 차이가 있습니까? (필자는 가정하지 않습니다.) 실제로 어떤 사람이 적합하지 않은 경우가 있습니까? (다른 사람이 내 대회에서 확실한 승자가됩니까?) *

* 나는 아무 것도 아닌 어떤 싱글 톤을 언급하고있다.

해결법

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

    1.동일한 바이트 코드로 컴파일 할 때 성능 차이는 없습니다.

    동일한 바이트 코드로 컴파일 할 때 성능 차이는 없습니다.

    Python 2.6.2 (r262:71600, Apr 15 2009, 07:20:39)
    >>> import dis
    >>> def f(x):
    ...    return x is not None
    ...
    >>> dis.dis(f)
      2           0 LOAD_FAST                0 (x)
                  3 LOAD_CONST               0 (None)
                  6 COMPARE_OP               9 (is not)
                  9 RETURN_VALUE
    >>> def g(x):
    ...   return not x is None
    ...
    >>> dis.dis(g)
      2           0 LOAD_FAST                0 (x)
                  3 LOAD_CONST               0 (None)
                  6 COMPARE_OP               9 (is not)
                  9 RETURN_VALUE
    

    스타일리시하게, 나는 x가 y가 아니라는 것을 피하려고 노력한다. 컴파일러는 항상 그것을 (x는 y)로 취급하지만, 인간 판독기는 (x가 아님) y를 사용하여 구문을 오해 할 수 있습니다. 만약 x가 y가 아니라면 모호함이 없다고 쓰십시오.

  2. ==============================

    2.Google과 Python 모두 스타일 가이드가 가장 좋습니다.

    Google과 Python 모두 스타일 가이드가 가장 좋습니다.

    if x is not None:
        # Do something about x
    

    not x를 사용하면 원치 않는 결과가 발생할 수 있습니다. 아래 참조 :

    >>> x = 1
    >>> not x
    False
    >>> x = [1]
    >>> not x
    False
    >>> x = 0
    >>> not x
    True
    >>> x = [0]         # You don't want to fall in this one.
    >>> not x
    False
    

    Python에서 리터럴이 참인지 거짓인지 평가하는 데 관심이 있습니다.

    아래의 댓글을 수정하십시오.

    방금 테스트를 더 했어. x가 None이 아닌 경우 x를 먼저 부정하지 않고 None으로 비교하지 않습니다. 실제로, is 연산자는 다음과 같이 사용될 때 우선 순위가 더 높습니다.

    >>> x
    [0]
    >>> not x is None
    True
    >>> not (x is None)
    True
    >>> (not x) is None
    False
    

    따라서 x가 아닌 것은 아닙니다. 정직한 의견으로는 피할 수 없습니다.

    추가 수정 :

    방금 더 많은 테스트를 수행했으며 bukzor의 의견이 정확한지 확인할 수 있습니다. (적어도, 나는 그것을 다르게 증명할 수 없었다.)

    즉, x가 None이 아니라면 x가 None이 아닌 것처럼 정확한 결과를 얻습니다. 나는 교정했다. 고마워요.

    그러나 내 대답은 여전히 ​​의미합니다 : x가 None이 아니라면 conventional을 사용하십시오. :]

  3. ==============================

    3.코드는 프로그래머가 먼저 이해할 수 있도록 작성해야하며 컴파일러 또는 인터프리터는 두 번째로 이해할 수 있도록 작성해야합니다. "is not"구조는 "not is"보다 영어와 더 유사합니다.

    코드는 프로그래머가 먼저 이해할 수 있도록 작성해야하며 컴파일러 또는 인터프리터는 두 번째로 이해할 수 있도록 작성해야합니다. "is not"구조는 "not is"보다 영어와 더 유사합니다.

  4. ==============================

    4.대답은 사람들이 만드는 것보다 간단합니다.

    대답은 사람들이 만드는 것보다 간단합니다.

    기술적 장점은 없으며 "x is y"는 다른 사람들이 사용하는 것입니다. 이로 인해 확실한 승자가됩니다. 그것은 "영어와 더 비슷하게 보입니다"라는 것과 상관 없습니다; 모두가 그것을 사용합니다. 즉, Python의 모든 사용자, 심지어 언어 사용자가 Python과 비슷한 언어를 사용하지 않는 중국 사용자도 한눈에 이해할 수 있습니다. 구문이 약간 덜 일반화되어 구문 분석에 두뇌가 추가 될 것입니다.

    적어도이 분야에서는 다른 존재가되지 않도록 서로 다르지 마십시오.

  5. ==============================

    5.TLDR : 바이트 코드 컴파일러는 x를 None으로 해석하지 않습니다. 따라서 x가 None이 아닌 경우 가독성을 위해 사용하십시오.

    TLDR : 바이트 코드 컴파일러는 x를 None으로 해석하지 않습니다. 따라서 x가 None이 아닌 경우 가독성을 위해 사용하십시오.

    우리는 인간의 가독성, 유용성, 성능에 대한 프로그래밍의 다양한 패러다임의 정확성과 같은 것들을 가치있게 생각하기 때문에 파이썬을 사용합니다.

    파이썬은 특히이 맥락에서 가독성을 위해 최적화합니다.

    not는 더 약하게 바인딩하므로 여기에는 논리적 인 차이점이 없습니다. 설명서를 참조하십시오.

    이 언어에 대한 가독성 향상을 위해 Python 문법에 특별히 제공되는 것은 아닙니다.

    comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not'
    

    그리고 이것은 문법의 단일 요소이기도합니다.

    물론, 그것은 같은 구문 분석되지 않습니다 :

    >>> import ast
    >>> ast.dump(ast.parse('x is not None').body[0].value)
    "Compare(left=Name(id='x', ctx=Load()), ops=[IsNot()], comparators=[Name(id='None', ctx=Load())])"
    >>> ast.dump(ast.parse('not x is None').body[0].value)
    "UnaryOp(op=Not(), operand=Compare(left=Name(id='x', ctx=Load()), ops=[Is()], comparators=[Name(id='None', ctx=Load())]))"
    

    하지만 바이트 컴파일러는 실제로는 변환하지 않습니다 ... is to not :

    >>> import dis
    >>> dis.dis(lambda x, y: x is not y)
      1           0 LOAD_FAST                0 (x)
                  3 LOAD_FAST                1 (y)
                  6 COMPARE_OP               9 (is not)
                  9 RETURN_VALUE
    >>> dis.dis(lambda x, y: not x is y)
      1           0 LOAD_FAST                0 (x)
                  3 LOAD_FAST                1 (y)
                  6 COMPARE_OP               9 (is not)
                  9 RETURN_VALUE
    

    따라서 가독성과 의도 한 언어 사용을 위해 사용하지 마시기 바랍니다.

    그것을 사용하지 않는 것이 현명하지 않습니다.

  6. ==============================

    6.is not 연산자는 결과를 부정하는 것보다 선호됩니다. "x가 None이 아닌 경우 :"는 영어와 같이 읽지 만 "x가 None이면 :"은 연산자 우선 순위를 이해해야하며 영어와 같이 읽지 않습니다.

    is not 연산자는 결과를 부정하는 것보다 선호됩니다. "x가 None이 아닌 경우 :"는 영어와 같이 읽지 만 "x가 None이면 :"은 연산자 우선 순위를 이해해야하며 영어와 같이 읽지 않습니다.

    실적 차이가 있다면 돈을 벌 수는 없지만이 방법을 선호하는 결정에 대한 동기는 거의 아닙니다. 그것은 분명히 구현에 따라 달라질 것입니다. is가 오버라이드 할 수 없기 때문에 어떤 식 으로든 어떤 구별도 쉽게 최적화 할 수 있어야합니다.

  7. ==============================

    7.개인적으로, 나는

    개인적으로, 나는

    if not (x is None):
    

    이것은 모든 프로그래머가 모호하지 않고 즉시 이해할 수 있습니다. 심지어 파이썬 구문의 전문가가 아니더라도 말입니다.

  8. ==============================

    8.x가 None이 아닌 경우 다른 프로그래밍 언어와 유사하지만 x가없는 경우 None은 분명히 더 명확하게 들립니다 (그리고 더 문법적으로 영어로 정확합니다).

    x가 None이 아닌 경우 다른 프로그래밍 언어와 유사하지만 x가없는 경우 None은 분명히 더 명확하게 들립니다 (그리고 더 문법적으로 영어로 정확합니다).

    그건 나에게 더 좋아하는 것 같아.

  9. ==============================

    9.더 읽기 쉬운 양식을 선호합니다 x는 y가 아닙니다. 보다 더 읽기 쉬운 코드를 생성하기 위해 연산자의 코드 처리 우선 순위를 작성하는 방법을 생각할 것입니다.

    더 읽기 쉬운 양식을 선호합니다 x는 y가 아닙니다. 보다 더 읽기 쉬운 코드를 생성하기 위해 연산자의 코드 처리 우선 순위를 작성하는 방법을 생각할 것입니다.

  10. ==============================

    10.이 시도:

    이 시도:

        if x != None:
           # do stuff with x
    
  11. from https://stackoverflow.com/questions/2710940/python-if-x-is-not-none-or-if-not-x-is-none by cc-by-sa and MIT license