Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの一般的なプログラミングエラーまたは「落とし穴」とは何ですか?


プログラマーが犯す最も一般的なPythonプログラミングの間違い/落とし穴のいくつかを次に示します。

スコープ名の検索: Pythonは、LEGB(ローカル、囲み、グローバル、組み込み)の順にスコープルールに従います。 Pythonには厳密な型バインディングがないため、プログラマーは外部スコープ変数を別の値に再関連付けできます。この値は後で外部スコープで使用される可能性がありますが、現在は他の値に置き換えられています。

isと=を区別しない: はPythonの演算子であり、両方のオブジェクトが同じメモリアドレスを参照しているかどうかをチェックします。 ==演算子は、__ eq__関数を実行します。この関数は、クラスごとに異なる方法で同等性をチェックする場合があります。

リストの反復中にリストを変更する:リストの反復中にリストから要素を削除すると、IndexErrorが発生します。これは、インデックスを縮小していないのにリストのサイズが縮小しているためです。

クロージャーバインディング- 次のコードを検討してください-

listLambdas = [lambda x : i + x for i in range(5)]
for lam in listLambdas:
   print(lam(10))
出力 これにより出力が得られます-

14
14
14
14
14

ショックを受けましたか?これは、クロージャのバインドによるものです。このリストのすべてのラムダは変数iを参照します。つまり、変数が変更されると、これらのラムダは新しい値の参照を開始します。

名前が組み込みと衝突する: ある時点で、sumという変数を作成しておく必要があります。この場合、sum関数への参照を再割り当てしたことに注意してください。これは、このようなことでは些細なことのように見えますが、パッケージにこのような名前を付けると、深刻な問題が発生する可能性があります。これにより、他のパッケージが標準のクラスではなくクラスをインポートする可能性があります。

演算子の直感的でない実装: Pythonは、クラスの演算子関数をオーバーロードする方法を提供します。多くの場合、人々はこれらの演算子を珍しい方法で実装し、複雑で直感的でないAPIを作成する傾向があります。


  1. Pythonのデフォルトの引数は何ですか?

    Pythonでは、関数の引数にデフォルト値を設定できます。関数が引数なしで呼び出された場合、引数はデフォルト値を取得します デフォルトの引数: 例 Pythonには、関数の引数の構文とデフォルト値を表す別の方法があります。デフォルト値は、関数呼び出し中に引数値が渡されない場合、関数引数がその値を取ることを示します。デフォルト値は、代入(=)演算子を使用して割り当てられます。以下は、デフォルト引数の一般的な構文です。ここで、fooパラメータのデフォルト値はHi!です。 def defaultArg(name, foo='Come here!'):    

  2. Python関数属性とは何ですか?

    Pythonのすべてがオブジェクトであり、ほとんどすべてに属性とメソッドがあります。 Pythonでは、関数もオブジェクトです。したがって、他のオブジェクトと同様の属性があります。すべての関数には、関数のソースコードで定義されたドキュメント文字列を返す組み込みの属性__doc__があります。それらに新しい属性を割り当てたり、それらの属性の値を取得したりすることもできます。 属性を処理するために、Pythonは「getattr」と「setattr」を提供します。これは3つの引数を取る関数です。 「setattr」と=代入演算子の左側にあるドット表記の使用に違いはありません: 指定されたコードは