問題タブ [python-internals]
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 - Python 2 がタプルを出力するために使用する方法は?
Python のprint
ステートメントは通常repr()
、その入力の を出力するようです。タプルは例外ではないようです:
しかし、その後、CPython の内部をいじっているときに、いくつかの奇妙な動作に出くわしました。要するに、Python 2 をだまして自己参照タプルを作成させた場合、それを直接印刷することは、repr()
//表現を印刷することとはまったく異なる動作をします。str()
unicode()
では、正確には何をしているのprint
でしょうか。この質問に自分で答えようとして、言語リファレンスを参照しました。
6.6.
文字列変換の規則は次のとおりです。
5.2.9. 文字列変換
文字列変換は、逆引用符 (逆引用符) で囲まれた式リストです。
しかし、逆引用符で囲むと、電話や友達とouter
同じ結果になります。repr()
サイコロはありません。print
では、舞台裏で実際に何をしているのでしょうか。
(興味深いことに、この動作は Python 3 で「修正」されています。自己参照タプルを出力すると、省略記号で切り捨てられた形式になります。)
python - Python でグローバル変数に書き込む (および書き込まない)
あまり動的でない C++ から来たので、この Python (2.7) コードの動作を理解するのに苦労しています。
注:これが悪いプログラミングスタイル/悪であることは承知していますが、それでも理解したいと思います。
このコードはエラーなしで実行されf
、(一見) グローバル リストを操作します。これは、関数内で操作される (読み取るだけでなく) グローバル変数は として宣言する必要があるという私の以前の理解に反していますglobal ...
。
一方、 に置き換えるvals[0] = 5
と、 に aを追加しない限りvals += [5,6]
、実行は an で失敗します。これは、最初のケースでも起こると予想していたことです。UnboundLocalError
global vals
f
この振る舞いを説明できますか?
vals
最初のケースで操作できるのはなぜですか? 最初のタイプの操作は失敗しないのに、2 番目のタイプの操作は失敗するのはなぜですか?
更新:vals.extend(...)
なしで機能
するコメントで指摘されましたglobal
。これは私の混乱を助長します -+=
への呼び出しとは異なる扱いを受けるのはなぜextend
ですか?
python - Python frozenset ハッシュ アルゴリズム / 実装
frozenset
現在、Python の組み込みデータ型に対して定義されているハッシュ関数の背後にあるメカニズムを理解しようとしています。実装は参照用に下部に示されています。私が特に興味を持っているのは、この散乱操作を選択した理由です。
h
各要素のハッシュはどこにありますか。これらがどこから来たか知っている人はいますか?(つまり、これらの数字を選ぶ特別な理由はありましたか?) それとも単に恣意的に選ばれたのでしょうか?
これは、公式の CPython 実装のスニペットです。
およびPython での同等の実装:
python - Python unittest モジュールの unittest.main() の意味
unittest
Python、特にモジュールで単体テストを学ぼうとしていました。
次の行を検討してください。
への呼び出しにより、すべてのテスト ケースが実行されていることがわかりましたunittest.main()
。
この呼び出しによってすべてのテスト ケースがどのように実行されるのか知りたいと思っただけです。
私はunittest.TestCase
すべてのテストクラスを継承しているので、すべての魔法を行っていることを知っています. 洞察はありますか?
python - Pythonメソッドアクセサは、アクセスごとに新しいオブジェクトを作成しますか?
別の質問を調査したところ、次のことがわかりました。
これは予想されていました:
しかし、これは私が期待していませんでした:
特にこれではありません:
Python は、メソッド アクセスごとに新しいオブジェクトを作成するようです。この動作が見られるのはなぜですか? つまり、クラスごとに 1 つのオブジェクトとインスタンスごとに 1 つのオブジェクトを再利用できない理由は何ですか?
python - タプル (a,b)=(b,a) のメンバーの交換は内部的にどのように機能しますか?
この a と b の値の交換は内部でどのように機能しますか? 一時変数を使用していないことは間違いありません。
python - 「デル」は正確に何をしますか?
これが私のコードです:
これは、インタープリターから実行したときの出力です。
行番号 メモリ使用量の増分 行の内容
出力に気付いた場合、巨大なリストを作成すると 621.5 MB が消費され、削除すると 152.6 MB が解放されました。docsを確認したところ、次のステートメントが見つかりました。
つまり、オブジェクト自体を削除したのではなく、バインドを解除しただけだと思います。しかし、バインド解除で何をしたので、多くのスペース (152.6 MB) が解放されました。誰かがここで何が起こっているのか説明してくれませんか?