web-dev-qa-db-ja.com

問題は何ですかpython 3つの新機能が解決しますか?

Python 3の新機能では:

私たちは主に、よく知られている不快感やいぼを修正し、多くの古い残骸を取り除いています

それは何が違うのか(修正)について述べていますが、なぜ(問題)については触れていません。何が問題だったのかわかりません。修正によって解決される問題は何ですか?

18
user712092

すぐに頭に浮かぶものに名前を付けます。

  • キーワードのみの引数:PEPの根拠に記載されています。
  • nonlocal:これがないと、クロージャーは閉じられた変数を上書きできません。このニーズは、デコレータやその他の高次関数で時々発生します。 (外部APIを切り替えずに)必要な変更可能な状態を変更可能なオブジェクトに格納する唯一の妥当な回避策は、非常に醜い方法です。
  • 辞書とセット内包表記:リスト内包表記と同様の方法でディクショナリーとセットを作成すると、ジェネレーター内包表記を使用して行うと、見栄えが悪くなり、少し遅くなります。これらのタイプを適切な場所で、追加コストなしで使用できます。特にinテストのセットリテラルのディット(Python 3.2以降、これらはピープホールオプティマイザーによっても最適化されます)。
  • 8進数リテラルはPython 2に存在しましたが、0777表記は、慣れていない場合の落とし穴です(他のコンテキストでは、先行ゼロを追加しても値もベースも変更されません)。
  • バイナリリテラルは、16進リテラルよりもさらにビットをいじるのに役立ちます。
  • バイトリテラルは、ユニコード文字列とバイト文字列が強制的に区別され、文字列リテラルがユニコードであることの兆候です。これらの変更により、テキストと未解釈のバイナリデータの違い、およびエンコーディングについて考える必要があります。それ以外の場合は、エンコーディング関連のエラーを見つけるために広範なテスト(英語を話すヨーロッパ/アメリカ中心の愚か者が考えることはほとんどありません)が必要になるため、これは重要です。
  • except ex, var-> except ex as var一般的なエラーを修正しますexcept ValueError, IndexError(両方をキャッチする必要がありますが、最初のものだけをキャッチし、IndexErrorという名前をキャッチした例外で上書きします)。
  • リスト内包スコープ:名前空間の汚染を避け、ジェネレータ式の観点からそれらを考えることができます。
  • 削除された構文とモジュール:「それを行うための明白な方法は1つ、できれば1つだけである必要があります。」そして、貧弱なチュートリアルを持つ人々が、物事を修正するための古くて行き詰まった方法に固執するのを避けます。
11
user7043