問題タブ [zen-of-python]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 単一の (数値) 変数の値を保存 (永続化) する最も洗練された方法
100 カウントごとに特定のサブルーチンをトリガーできるように、スクリプトの実行間でカウンターの値を保存する必要があります。整数をテキスト ファイルに書き込んで再度読み取ることができることはわかっています。また、変数をピクルしてほぼ同じ効果を得ることができることもわかっています (スクリプトは現在、後者のアプローチを使用しています)。
私が関心を持っているのは、コードをできる限り洗練されたものにするアプローチを見つけることです。つまり、特に技術に詳しくない聴衆にとって、単純で簡単に理解できるようにすることです。
モジュール名はそのpickle
点では役に立ちません - 一度比喩を理解すれば、それは完全に記憶に残りますが、それがわからない場合は、Python オブジェクトをシリアル化するためのモジュールであることを説明するコメント (または口頭での説明) が必要です。ディスクに。
「あると便利」ですが、ストレージ操作の原子性についても、保存された値が失われないように強力に保護することについても特に心配していません [ただし、サーバーの再起動後も保持する必要があります]。
私の興味は、変数の値にアクセスして更新するためのコードの優雅さであり、値を格納しているものを初期化するためのコードの優雅さではありません(したがって、値がファイルに格納される場合は、最初の実行時にファイルを作成するのではなく、既に存在し、値を保持しているファイルの読み取りと書き込みを行います)。
単一の (数値) 値を保存してスクリプトの実行間で保持する最もエレガントな (および/または最も Pythonic) 方法は何ですか?
python - 関数の繰り返しを減らす方法。主な違いは、呼び出されるサブ関数の名前です。
コードは次のようになります。
私はすでに 3 つのパラメーターを持っているので、関数に追加のパラメーターを追加することが良い考えかどうかはわかりません。
しかし、さらに最適化を行わないと、現在のコードではパーツの繰り返しが多すぎます#do samething
。(以下のオリジンコードのように)。
どうすれば改善できますか?
python - 競合する言語設計の目的 (例: リスト/タプル、連結/拡張、+ および +=) の不幸な結果の名前は?
与えられた:
+
、+=
およびを使用した次のステートメントextend()
は問題ありません。
ただし、次のステートメントはエラーになります。
int などの不変の数値型で機能することは、便宜上意味があることを理解してい+=
ます (ただし、たとえば、C/C++ の類似の演算子とは異なる意味を持ちます)。+=
そして、変更可能なシーケンス型 (リスト) を持つ反復可能な RHS を LHS として受け入れると便利であることを理解しています。
あるレベルでは int と tuple は似ています (どちらも不変です) +=
。
また、あるレベルでは、リストとタプルは似ています (両方とも組み込みのシーケンス型)。したがって+=
、リスト LHS で機能する場合、タプル LHS では「なぜ」機能しないのでしょう。
しかし...これは、ひどく直感的ではない矛盾をもたらします。
+=
ビルトイン シーケンス タイプ間での演算子の並列使用のサポートの欠如:
L += iterable
リスト L をその場で変更し、それへの既存の参照が変更を追跡しますが、 ...T += iterable
iterableがタプルでない限り、タプル T に対して TypeError を返し、LHS と RHS が両方ともタプルであると仮定すると、LHS は新しいオブジェクトに置き換えられます。
- 2 つの直感的に同一の操作間での意味の変更、
+=
および+
:
L += T
反復可能な RHS (タプル T) を使用して拡張することにより、リスト L をその場で変更しますが、 ...L = L + T
タプル T は の左側のオペランド (リスト L) と同じ型ではないため、 TypeError を返し+
ます。
そして今、私の質問: Python の世界でこの現象の名前はありますか? それによって、さまざまな考慮事項 (Python の Zen または他の言語哲学、強力な型付け、実用性が純粋さを打ち負かす、直感的な演算子の等価性、可変性、数値 - vs-sequence 型) は、組み込みシーケンス型全体での並列使用の欠如や、上で強調した組み込み型の直観に反する演算子の矛盾など、言語の矛盾と見なすことができるものにつながっていますか?