2013-01-18 2 views
2

소수성 테스터를 코딩 할 때 나는 흥미로운 생각을하게되었다. 작업 결과가 0으로 밝혀지면 무언가를하고 싶을 때 더 나은 ('파이썬적인') 태클 방법이 무엇입니까?if 문에서 0을 확인하는 Python 방식?

# option A - comparison 
if a % b == 0: 
    print('a is divisible by b') 

# option B - is operator 
if a % b is 0: 
    print('a is divisible by b') 

# option C - boolean not 
if not a % b: 
    print('a is divisible by b') 

PEP 8None 같은 싱글에 비교가 is 연산자로 수행되어야한다고 말한다. 또한 빈 시퀀스를 검사 할 때 not을 사용하고 부울 값을 == 또는 is과 비교하지 말아야한다고 말합니다. 그러나 결과적으로 0을 확인하는 것에 대해서는 언급하지 않습니다.

그래서 어떤 옵션을 사용해야합니까?

+1

나는 그것이 (더) Pythonic인지 여부는 모르지만 나는 선호하는 C를 선호한다. – elssar

+0

나는 더 읽기 쉽다. 파이썬 3.3 소스 코드를 보면 362 번 문자열 "== 0 :"을, 결코 "0 :"이 아닙니다. 옵션 C에 대해 자동으로 확인하기가 더 어려워 지지만 옵션 A가 선호됩니다. –

답변

6

0에 대한 테스트는 0을 테스트하여 수행하는 것이 가장 좋습니다. 또한 01 이외의 다른 값이있을 수 있음을 나타냅니다.

호출 된 함수 정말에만 성공 0Yes/No, Success/Failure, True/False을 말할 실패에 1 돌려주는 경우, 나는 함수가 문제이며 (해당되는 경우)을 TrueFalse를 반환하도록 수정해야한다고 생각 대신.

+1

외부 프로그램을 실행할 때 반환 값으로 '0'과 '1'(또는 다른 int)는 매우 일반적입니다. 예를 들어,'subprocess.call'는 정확히 이러한 반환 값을가집니다. –

+0

@ThorstenKranz : 가능한 경우 명시 적으로 표시하는 것이 좋습니다. 특히 반환 값을 제어 할 수 있다면 더욱 그렇습니다. 'True' 또는'False'를 반환하면 함수를 호출하는 사람이 * 단지 * 값을 반환한다는 것을 알 수 있습니다. 0과 1은 좀 더 애매합니다. –

+0

물론, "use 1 and 0"이라고 말하고 싶지 않았습니다. 나는'while 1 :'과 같은 말을 싫어한다. 우리는 21 세기에 있으며, 우리는'bool'-type을 가지고 있습니다. 반환 값이 0과 1 인 상황이 있음을 지적하고 싶었습니다. –

1

그냥 개인 : 나는 매우 읽을 수있는 것 같아서 not a % b 방식을 선호합니다. 하지만 이제는 코드의 혼동 수준을 낮추기 위해 == 0을 사용합니다. 정확히 정확하게 테스트 할 것으로 예상되는 내용을 표현하기 때문입니다. 그것은 "debug for care"접근 방식입니다.

1

0 그래서에 대해 테스트 할 is를 사용하지 않는 싱글을 보장하지 않습니다 : 당신이 있다면 아마 하나의 값이 0 int 플러스 long이 때문에 현재 C 파이썬 작은 정수를 재 - 사용 여전히 Python 2.x 및 부동 소수점 수는 False를 제외하고 모든 숫자는 0과 같습니다. Python의 일부 초기 버전에서는 별도의 bool 유형을 사용하기 전에 비교 결과에 대해 다른 int 제로를 사용했습니다.

내가 선호하는 == 또는 선호하는 not 중 하나를 사용하십시오.

1

A와 C는 모두 유효하고 매우 파이썬 적입니다.

  1. 0 의미 론적 싱글 톤 (그것의 CPython에 있지만 그 구현의 세부 사항이다)이 아니기 때문에

    B는 아니다.

  2. float a 또는 b에서는 작동하지 않습니다.
  3. 다른 파이썬 구현에서는 작동하지 않을 수도 있습니다.