1. ホーム
  2. python

[解決済み] Pythonにおけるincrementとdecrement演算子の挙動

2022-03-20 17:09:53

質問

変数にプリインクリメント/デクリメント演算子を適用することができますね(例えば ++count ). コンパイルはできますが、実際に変数の値が変わるわけではありません!

Pythonのプリインクリメント/デクリメント演算子(++/--)はどのような動作をしますか?

なぜPythonは、C/C++で見られるこれらの演算子の動作から外れているのでしょうか?

どうすれば解決するの?

++ は演算子ではありません。これは2つの + 演算子です。その + 演算子は アイデンティティ 演算子で、何もしない。(明確には +- 単項演算子は数字にしか使えませんが、まさか仮想の ++ 演算子が文字列の上で動作することはありません)。

++count

としてパースします。

+(+count)

という訳になります。

count

を使う必要があり、少し長い += 演算子を使えば、やりたいことができる。

count += 1

を疑います。 ++-- 演算子は、一貫性と簡略化のために省かれました。Guido van Rossumがこの決定に対してどのような議論をしたのか正確には知らないが、いくつかの議論を想像することはできる。

  • 解析がよりシンプルになる。技術的には、パースする ++count は曖昧です。 + , + , count (2つの単項 + 演算子) と同じように、簡単に ++ , count (1つの単項 ++ 演算子)を使用します。重要な構文上の曖昧さではありませんが、存在することは事実です。
  • よりシンプルな言語。 ++ の同義語に過ぎません。 += 1 . これは、C コンパイラが愚かで、最適化する方法を知らなかったために考案された略記法です。 a += 1inc という命令で、ほとんどのコンピュータが持っています。最適化コンパイラやバイトコード解釈言語が普及した今日、プログラマがコードを最適化できるように言語に演算子を追加することは、特にPythonのように一貫性があり読みやすいように設計されている言語では、通常嫌われます。
  • 紛らわしい副作用。初心者にありがちなミスの1つに ++ 演算子は、インクリメント/デクリメント演算子の前後の違い(優先順位と戻り値の両方)を混同してしまいますが、 Python は言語の "gotcha"- を排除したいのです。その 優先順位の問題 C言語におけるプリ/ポストインクリメント はかなり毛むくじゃらで、信じられないほど簡単に失敗してしまいます。