問題タブ [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のリストよりも効率的ですか?
要素のインスタンス化と取得に関して、タプルとリストの間にパフォーマンスの違いはありますか?
python - time.sleep-スレッドまたはプロセスをスリープしますか?
Python for * nixではtime.sleep()
、スレッドまたはプロセスをブロックしますか?
python - 「is」演算子は整数で予期しない動作をします
Pythonで次のように予期しない動作をするのはなぜですか?
Python2.5.2を使用しています。Pythonのいくつかの異なるバージョンを試してみると、Python2.3.3は99から100の間で上記の動作を示しているようです。
上記に基づいて、Pythonは内部的に実装されており、「小さい」整数は大きい整数とは異なる方法で格納され、is
演算子はその違いを認識できると仮定できます。なぜ漏れのある抽象化?2つの任意のオブジェクトを比較して、それらが数字であるかどうかを事前に知らない場合に、それらが同じであるかどうかを確認するためのより良い方法は何ですか?
python - __slots__の使用法?
Pythonの目的は何ですか?__slots__
特に、いつ使用したいのか、使用したくないのかについてはどうでしょうか。
python - CPython のグローバル インタープリター ロック (GIL) とは何ですか?
グローバル インタープリター ロックとは何ですか? なぜ問題なのですか?
Python から GIL を削除することに関して多くの騒ぎがありましたが、なぜそれがそれほど重要なのかを理解したいと思います。私は自分でコンパイラやインタープリターを書いたことがないので、詳細を倹約しないでください。おそらく理解する必要があるでしょう。
python - Pythonオブジェクトのコピー/ディープコピー操作をオーバーライドするにはどうすればよいですか?
コピーモジュールとの違いを理解してcopy
います。deepcopy
私は以前に使用copy.copy
して成功しましたが、実際にandメソッドcopy.deepcopy
をオーバーロードするのはこれが初めてです。私はすでにグーグルで検索し、組み込みのPythonモジュールを調べて、and関数(、、、など)のインスタンスを探しましたが、それが正しいかどうかはまだ100%わかりません。__copy__
__deepcopy__
__copy__
__deepcopy__
sets.py
decimal.py
fractions.py
これが私のシナリオです:
構成オブジェクトがあります。最初に、デフォルトの値のセットを使用して1つの構成オブジェクトをインスタンス化します。この構成は、他の複数のオブジェクトに渡されます(すべてのオブジェクトが同じ構成で開始されるようにするため)。ただし、ユーザーインタラクションが開始されると、各オブジェクトは、互いの構成に影響を与えることなく、その構成を個別に微調整する必要があります(つまり、初期構成のディープコピーを作成して渡す必要があります)。
サンプルオブジェクトは次のとおりです。
適切な動作を保証して提供するために、このオブジェクトにメソッドcopy
とメソッドを実装する正しい方法は何ですか?deepcopy
copy.copy
copy.deepcopy
python - Pythonの組み込みのsort()メソッドについて
sort()
Pythonに組み込まれているメソッドはどのアルゴリズムを使用していますか?そのメソッドのコードを見ることができますか?
python - Pythonのコンパイル/解釈プロセス
Pythonコンパイラ/インタプリタのプロセスをより明確に理解しようとしています。残念ながら、私は通訳のクラスを受講したことも、通訳について多くを読んだこともありません。
基本的に、私が今理解しているのは、.py
ファイルからのPythonコードが最初にpythonバイトコードにコンパイルされるということです(これは私が.pyc
時々見るファイルだと思いますか?)。次に、バイトコードは、プロセッサが実際に理解する言語であるマシンコードにコンパイルされます。ほとんど、私はこのスレッドを読みましたなぜPythonは解釈する前にソースをバイトコードにコンパイルするのですか?
私のコンパイラ/インタプリタの知識はほとんど存在しないことを念頭に置いて、誰かが私にプロセス全体の良い説明を教えてもらえますか?または、それが不可能な場合は、コンパイラ/インタプリタの概要を説明するリソースを教えてください。
ありがとう
python - 作成中のオブジェクトが割り当てられている名前にアクセスする
オブジェクトが割り当てられている名前を判別するためのコードを書いています。これは、一般的なデバッグ作業のためであり、Pythonの内部にさらに慣れるためのものです。
可能であれば、そのクラスのすべてのインスタンスに名前が記録されるように、クラスデコレータとして構造化しています。コードはかなり長いので、尋ねられない限り投稿しません。一般的なテクニックは次のとおりですが
クラスの
__init__
メソッドをコードで装飾して、私がやりたいことを実行します設定
caller = inspect.currentframe().f_back
して開きinspect.getframeinfo(caller).filename
、に送信しast.parse
ます。ここではエラーチェックを行いません。これは、(1)これはデバッグ/プロファイリング/ハッキングのためだけのものです(2)この正確なプロセスが「完了したばかり」であるか、コードが実行されていないためです。これに問題はありますか?現在実行中のメソッドを実行さ
ast.Assignment
せるインスタンスを見つけます__init__
その場合
len(assignment.targets) == 1
、左側にアイテムが1つしかないので、から名前を取得できますtargets[0].id
。のような単純な形式a = Foo()
でassignment.value
は、はのインスタンスですast.Call
。リテラル(リストなど)の場合、value
関心のあるオブジェクトが名前に割り当てられていないため、そのリストとベイルになります。
assignment.value.func
それが実際type(obj).__call__
に私が興味を持っているオブジェクトであることを確認するための最良の方法は何ですか。それが「どこかにある」か、コードが実行されないことさえ保証されていると確信しています。私はそれがトップレベルにある必要があります。当然のことは、それを歩き、内部呼び出しが含まれていないことを確認することです。そうすれば、私は自分の名前を持っていることが保証されます。(私の推論は正しいです、その仮定が正しいかどうかはわかりません)。これは理想的ではありません。なぜなら、私が興味を持っている場合、それがであるかどうかわからないのでFoo
、これは私を投げ捨てることにつながる可能性があるからです。 a = Foo(Bar())
a = Bar(Foo())
もちろん、確認するassignment.value.func.id
ことはできますが、誰かがやった可能性がFoobar = Foo
あるので、これに過度に依存したくありません。
どんな助けでも大歓迎です。いつものように、私は見落としているかもしれない他の提案や問題に興味があります。
また、「python-internals」タグを発明しなければならなかったことに本当に驚いています。
python - CPythonでid({})== id({})およびid([])== id([])なのはなぜですか?
CPython(他のPython実装についての手がかりがない)が次のように動作するのはなぜですか?
理由はいくつかありますが、具体的な理由がわかりません。
編集
グレンとトーマスの主張をさらに証明するには: