3

素数判定をコーディングする際に、興味深い考えに出くわしました。操作の結果がであることが判明した場合に何かをしたい場合、0それに取り組むためのより良い(「pythonic」)方法はどれですか?

# 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 8は、のようなシングルトンとの比較Noneは演算子で行う必要があると述べていisます。また、空のシーケンスをチェックするには、ブール値をまたはと比較するのではなく、を使用する必要があることも示しnotています。ただし、結果としてのチェックについては何も言及されていません。==is0

では、どのオプションを使用する必要がありますか?

4

4 に答える 4

6

に対するテスト0は、(imo)に対してテストすることによって最もよく行われます00これは、とだけでなく他の値が存在する可能性があることも示しています1

呼び出された関数が実際0に成功した場合にのみ戻り、、、、など1と言わなかった場合、関数が問題であり、(該当する場合は)戻るように修正する必要があると思います。Yes/NoSuccess/FailureTrue/FalseTrueFalse

于 2013-01-18T09:38:26.220 に答える
1

ただ個人的な:not a % bそれは非常に読みやすいように見えるので、私はその方法を好みます。しかし、ここで、コードの混乱レベルを下げるために、を使用し== 0ます。これは、より正確な方法で正確にテストすることを期待していることを表すためです。これは「デバッグのケア」アプローチです。

于 2013-01-18T09:43:05.303 に答える
1

0はシングルトンであることが保証されていないためis、テストに使用しないでください。現在、C Pythonは小さな整数を再利用しているため、Python 2.xを使用している場合はint、値が0とaの整数が1つしかない可能性があります。longまた、Falseは言うまでもなく、任意の数のfloatゼロはすべて0に等しくなります。Pythonの以前のバージョンでは、別のboolタイプを取得する前に、比較の結果に異なるintゼロを使用していました。

==(私の好みです)または単にnot、どちらか好きな方を使用してください。

于 2013-01-18T09:47:07.203 に答える
1

AとCはどちらも有効で、非常にpythonicです。

Bはそうではありません。

  1. 0意味的にはシングルトンではありません(cPythonにありますが、これは実装の詳細です)。
  2. afloatまたは。では機能しませんb
  3. 実際には、これがPythonの他の実装では機能しない可能性があります。
于 2013-01-18T09:56:01.620 に答える