タグ付けされた質問 「cpython」

3
関数でPythonコードがより速く実行されるのはなぜですか?
def main(): for i in xrange(10**8): pass main() このPythonのコードは、以下で実行されます(注:タイミングは、LinuxのBASHのtime関数で実行されます)。 real 0m1.841s user 0m1.828s sys 0m0.012s ただし、forループが関数内に配置されていない場合、 for i in xrange(10**8): pass その後、より長い時間実行されます。 real 0m4.543s user 0m4.524s sys 0m0.012s どうしてこれなの?

12
PyPyが6.3倍高速である場合、CPythonではなくPyPyを使用すべきではないのはなぜですか?
PyPyプロジェクトについてはよく聞いています。彼らはそれが彼らのサイトのCPythonインタープリターより6.3倍速いと主張しています。 Pythonのような動的言語について話すときはいつでも、速度が最大の問題の1つです。これを解決するために、彼らはPyPyが6.3倍速いと言います。 2つ目の問題は、悪名高いグローバルインタープリターロック(GIL)である並列処理です。このため、PyPyはGILのないPythonを提供できると述べています。 PyPyがこれらの大きな課題を解決できるとしたら、PyPyの幅広い採用を妨げている弱点は何ですか?つまり、典型的なPython開発者である私のような誰かが、今 PyPyに切り替えるのを妨げているのは何ですか?

9
PythonとCpython
PythonとCPython (Jython、IronPython)のこの大騒ぎは何ですか、わかりません: python.orgはCPythonが次のとおりであることを述べています: Pythonの「伝統的な」実装(CPythonのニックネーム) さらに別のスタックオーバーフローの質問では、次のように述べられています。 CPythonは、Pythonのデフォルトのバイトコードインタープリターであり、Cで記述されています。 正直に言って、これらの両方の説明が実際に何を意味するのかわかりませんが、私が思ったのは、CPythonを使用する場合、サンプルのPythonコードを実行すると、C言語にコンパイルされ、Cであるかのように実行されるということです。コード それでは、CPythonとは正確には何であり、Pythonと比較した場合、どのように異なるのでしょうか。PythonではなくCPythonを使用する必要がありますか。そうであれば、その利点は何ですか。
447 python  cpython 

2
一部のfloat <integer比較が他のものより4倍遅いのはなぜですか?
浮動小数点数を整数と比較する場合、値のペアによっては、同様の大きさの他の値よりも評価に時間がかかります。 例えば: &gt;&gt;&gt; import timeit &gt;&gt;&gt; timeit.timeit("562949953420000.7 &lt; 562949953421000") # run 1 million times 0.5387085462592742 しかし、浮動小数点数または整数を一定量だけ小さくまたは大きくすると、比較ははるかに速く実行されます。 &gt;&gt;&gt; timeit.timeit("562949953420000.7 &lt; 562949953422000") # integer increased by 1000 0.1481498428446173 &gt;&gt;&gt; timeit.timeit("562949953423001.8 &lt; 562949953421000") # float increased by 3001.1 0.1459577925548956 比較演算子を変更しても(例:==または&gt;代わりに)、時間に顕著な影響を与えることはありません。 大きい値または小さい値を選択すると比較が高速になるため、これはマグニチュードだけに関連しているわけではないので、ビットの並び方が不運なことにあるのではないかと思います。 明らかに、これらの値を比較することは、ほとんどのユースケースで十分な速さです。なぜPythonが他の値のペアよりもいくつかの値のペアで苦労しているように見えるのか、私は単に興味があります。

5
set()はどのように実装されていますか?
私はset、PythonのオブジェクトにO(1)メンバーシップチェックがあると言われているのを見てきました。これを可能にするために内部でどのように実装されていますか?どのようなデータ構造を使用していますか?その実装には他にどのような影響がありますか? ここでのすべての答えは本当に啓発的でしたが、私は1つしか受け入れることができないため、元の質問に最も近い答えを使用します。情報ありがとうございました!

3
[* a]が割り当て超過になる原因は何ですか?
どうやらlist(a)、[x for x in a]オーバーローケートしない、ある時点でオーバーローケートする、常に[*a]オーバーローケートするのでしょうか。 以下は、0から12までのサイズnと、3つのメソッドの結果のバイト単位のサイズです。 0 56 56 56 1 64 88 88 2 72 88 96 3 80 88 104 4 88 88 112 5 96 120 120 6 104 120 128 7 112 120 136 8 120 120 152 9 128 184 184 10 136 184 192 …

3
小さなリストよりも小さな文字列を反復するのが遅いのはなぜですか?
私はtimeitで遊んでいて、小さな文字列に対して単純なリストの理解を行うと、小さな単一の文字列のリストに対して同じ操作を行うよりも時間がかかることに気づきました。説明はありますか?ほぼ1.35倍の時間です。 &gt;&gt;&gt; from timeit import timeit &gt;&gt;&gt; timeit("[x for x in 'abc']") 2.0691067844831528 &gt;&gt;&gt; timeit("[x for x in ['a', 'b', 'c']]") 1.5286479570345861 これを引き起こしている下位レベルで何が起こっていますか?

1
tuple(set([1、“ a”、“ b”、“ c”、“ z”、“ f”]))== tuple(set([“ a”、“ b”、“ c”、 「z」、「f」、1]))ハッシュのランダム化が有効な場合、85%の時間ですか。
ゼロピレウスの別の質問への回答を考えると、 x = tuple(set([1, "a", "b", "c", "z", "f"])) y = tuple(set(["a", "b", "c", "z", "f", 1])) print(x == y) プリント Trueと時間の85%程度のハッシュのランダム化が有効になって。なぜ85%ですか?

10
IronPythonとPython.NET
PythonコードからC#で記述されたいくつかの.NETアセンブリにアクセスしたいと思います。 少し調べてみると、2つの選択肢があることがわかりました。 .NETインターフェース機能/サポートが組み込まれたIronPython Python.NETパッケージを使用したPython 両方のソリューション間のトレードオフは何ですか?

2
Pythonセットが挿入順序を保持しないのはなぜですか?
ディクテーションはPython 3.7以降で挿入順序を保持することが保証されていますが、セットはそうではないことを最近発見して驚きました。 &gt;&gt;&gt; d = {'a': 1, 'b': 2, 'c': 3} &gt;&gt;&gt; d {'a': 1, 'b': 2, 'c': 3} &gt;&gt;&gt; d['d'] = 4 &gt;&gt;&gt; d {'a': 1, 'b': 2, 'c': 3, 'd': 4} &gt;&gt;&gt; s = {'a', 'b', 'c'} &gt;&gt;&gt; s {'b', 'a', 'c'} &gt;&gt;&gt; s.add('d') &gt;&gt;&gt; s {'d', 'b', …
12 python  set  cpython 

4
タプルのスライスはリストのスライスとは対照的に新しいオブジェクトを返さない
Python(2および3)。リストスライシングを使用すると、常に次のような新しいオブジェクトが返されます。 l1 = [1,2,3,4] print(id(l1)) l2 = l1[:] print(id(l2)) 出力 &gt;&gt;&gt; 140344378384464 &gt;&gt;&gt; 140344378387272 同じことがタプルで繰り返された場合、同じオブジェクトが返されます。例: t1 = (1,2,3,4) t2 = t1[:] print(id(t1)) print(id(t2)) 出力 &gt;&gt;&gt; 140344379214896 &gt;&gt;&gt; 140344379214896 誰かがこれがなぜ起こっているのかについていくつかの光を当てることができれば素晴らしいでしょう、私のPythonの経験を通して、空のスライスが新しいオブジェクトを返すという印象を受けました。 私の理解では、タプルは不変であるのと同じオブジェクトを返し、その新しいコピーを作成する意味はありません。しかし、繰り返しになりますが、ドキュメントのどこにも記載されていません。
12 python  list  tuples  slice  cpython 

2
クラスに記述子を設定すると記述子が上書きされるのはなぜですか?
簡単な再現: class VocalDescriptor(object): def __get__(self, obj, objtype): print('__get__, obj={}, objtype={}'.format(obj, objtype)) def __set__(self, obj, val): print('__set__') class B(object): v = VocalDescriptor() B.v # prints "__get__, obj=None, objtype=&lt;class '__main__.B'&gt;" B.v = 3 # does not print "__set__", evidently does not trigger descriptor B.v # does not print anything, we overwrote the …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.