[解決済み] 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 += 1
をinc
という命令で、ほとんどのコンピュータが持っています。最適化コンパイラやバイトコード解釈言語が普及した今日、プログラマがコードを最適化できるように言語に演算子を追加することは、特にPythonのように一貫性があり読みやすいように設計されている言語では、通常嫌われます。 -
紛らわしい副作用。初心者にありがちなミスの1つに
++
演算子は、インクリメント/デクリメント演算子の前後の違い(優先順位と戻り値の両方)を混同してしまいますが、 Python は言語の "gotcha"- を排除したいのです。その 優先順位の問題 の C言語におけるプリ/ポストインクリメント はかなり毛むくじゃらで、信じられないほど簡単に失敗してしまいます。
関連
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み】ビットシフト(bit-shift)演算子とは、どのようなもので、どのように機能するのですか?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] リファレンス - このシンボルはPHPで何を意味するのですか?
-
[解決済み】なぜJavaの+=, -=, *=, /=複合代入演算子はキャスティングを必要としないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python string splicing.join()とsplitting.split()の説明
-
任意波形を生成してtxtで保存するためのPython実装
-
風力制御におけるKS原理を深く理解するためのpythonアルゴリズム
-
Python LeNetネットワークの説明とpytorchでの実装
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み] Python 整数インクリメント ++ [重複] を使用する