标签: cpython

为什么Python代码在函数中运行得更快?

def main():
    for i in xrange(10**8):
        pass
main()
Run Code Online (Sandbox Code Playgroud)

Python中的这段代码运行(注意:时序是在Linux中的BASH中使用时间函数完成的.)

real    0m1.841s
user    0m1.828s
sys     0m0.012s
Run Code Online (Sandbox Code Playgroud)

但是,如果for循环没有放在函数中,

for i in xrange(10**8):
    pass
Run Code Online (Sandbox Code Playgroud)

然后它会运行更长的时间:

real    0m4.543s
user    0m4.524s
sys     0m0.012s
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

python performance benchmarking profiling cpython

809
推荐指数
3
解决办法
6万
查看次数

如果PyPy快6.3倍,为什么我不应该使用PyPy而不是CPython?

我一直听到很多关于PyPy项目的消息.他们声称它比他们网站上的CPython解释器快6.3倍.

每当我们谈论像Python这样的动态语言时,速度是最重要的问题之一.为了解决这个问题,他们说PyPy的速度要快6.3倍.

第二个问题是并行性,臭名昭着的全球口译锁(GIL).为此,PyPy表示它可以提供无GIL的Python.

如果PyPy可以解决这些巨大的挑战,它的弱点是什么阻碍了更广泛的采用?也就是说,什么阻止像我这样的人,一个典型的Python开发人员,现在切换到PyPy ?

python performance jit pypy cpython

660
推荐指数
10
解决办法
15万
查看次数

Python vs Cpython

什么是关于Python和CPython (Jython,IronPython)的所有这些大惊小怪,我不明白:

python.org提到CPython是:

Python的"传统"实现(绰号CPython)

另一个Stack Overflow问题提到:

CPython是Python的默认字节码解释器,用C语言编写.

老实说,我没有得到这两个解释实际上意味着什么,但我认为,如果我使用CPython,这意味着当我运行示例python代码时,它将它编译为C语言,然后执行它就好像它是C码

那么CPython究竟是什么呢?与python相比它有何不同?我是否应该使用CPython而不是Python,如果有的话,它有什么优势呢?

python cpython

397
推荐指数
8
解决办法
18万
查看次数

为什么有些浮点数<整数比较慢四倍?

将浮点数与整数进行比较时,某些值对的评估时间比其他类似值的值要长得多.

例如:

>>> import timeit
>>> timeit.timeit("562949953420000.7 < 562949953421000") # run 1 million times
0.5387085462592742
Run Code Online (Sandbox Code Playgroud)

但是如果浮点数或整数变小或变大一定量,则比较运行得更快:

>>> timeit.timeit("562949953420000.7 < 562949953422000") # integer increased by 1000
0.1481498428446173
>>> timeit.timeit("562949953423001.8 < 562949953421000") # float increased by 3001.1
0.1459577925548956
Run Code Online (Sandbox Code Playgroud)

更改比较运算符(例如,使用==>替代)不会以任何明显的方式影响时间.

这并不仅仅与幅度有关,因为选择更大或更小的值可以导致更快的比较,因此我怀疑它是由于位排列的一些不幸的方式.

显然,对于大多数用例来说,比较这些值的速度要快得多.我只是好奇为什么Python似乎更多地使用一些值而不是其他值.

python floating-point performance cpython python-internals

283
推荐指数
1
解决办法
1万
查看次数

What causes [*a] to overallocate?

Apparently list(a) doesn't overallocate, [x for x in a] overallocates at some points, and [*a] overallocates all the time?

尺寸高达 n=100

Here are sizes n from 0 to 12 and the resulting sizes in bytes for the three methods:

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 …
Run Code Online (Sandbox Code Playgroud)

python cpython list python-3.x python-internals

148
推荐指数
3
解决办法
5643
查看次数

如何实现set()?

我见过有人说setpython 中的对象有O(1)成员资格检查.它们如何在内部实施以实现这一目标?它使用什么样的数据结构?该实施还有哪些其他含义?

这里的每个答案都很有启发性,但我只能接受一个,所以我会用最接近我原来问题的答案.谢谢你的信息!

python cpython set data-structures

140
推荐指数
6
解决办法
5万
查看次数

为什么迭代一个小字符串比一个小列表慢?

我正在玩timeit并注意到对一个小字符串做一个简单的列表理解比在一个小的单个字符串列表上做同样的操作要花费更长的时间.任何解释?这几乎是1.35倍的时间.

>>> from timeit import timeit
>>> timeit("[x for x in 'abc']")
2.0691067844831528
>>> timeit("[x for x in ['a', 'b', 'c']]")
1.5286479570345861
Run Code Online (Sandbox Code Playgroud)

在较低的水平上发生了什么导致这种情况?

python performance cpython timeit python-internals

132
推荐指数
2
解决办法
1万
查看次数

为什么(0-6)是-6 =假?

可能重复:
Python"is"运算符使用整数意外运行

今天我试着调试我的项目,经过几个小时的分析,我得到了这个:

>>> (0-6) is -6
False
Run Code Online (Sandbox Code Playgroud)

但,

>>> (0-5) is -5
True
Run Code Online (Sandbox Code Playgroud)

你能解释一下,为什么?也许这是某种错误或非常奇怪的行为.

> Python 2.7.3 (default, Apr 24 2012, 00:00:54) [GCC 4.7.0 20120414 (prerelease)] on linux2
>>> type(0-6) 
<type 'int'>
>>> type(-6) 
<type 'int'>
>>> type((0-6) is -6)
<type 'bool'>
>>> 
Run Code Online (Sandbox Code Playgroud)

python debugging integer cpython

129
推荐指数
4
解决办法
4897
查看次数

我们能让 1 == 2 成立吗?

Pythonint是封装实际数值的对象。我们可以修改这个值吗,例如将对象的值设置1为 2?那么这就1 == 2变成了True

python cpython python-internals

101
推荐指数
3
解决办法
8373
查看次数

97
推荐指数
1
解决办法
9521
查看次数