cpython相关内容
为了查明传递给函数的参数是“临时的”(仅传递到函数中)还是在外部引用的,我使用Py_REFCNT。这是在一个C扩展包中完成的,但为了更容易重现,我决定在这里提供一个基于IPython Magic的Cython实现。 在CPython3.5和CPython3.6之间,接受多个参数的函数似乎有些变化(对于只接受一个参数的函数,它仍然可以正常工作): In [1]: %load_ext cy
..
..
t = (1,2,3)t1 = (1,2,3)打印(id(t))打印(id(t1)) 以上代码行在 Python 中的脚本模式下给出了相同的地址,但在交互模式下它输出不同的地址.谁能解释一下这是什么原因? 解决方案 在编译脚本时,编译器可以搜索所有等价的元组并生成代码以对所有元组使用相同的引用. 但在交互模式下,它需要保留所有元组的缓存,以便它可以搜索先前的等效元组并返回对它的引用
..
我一直在尝试了解 CPython 是如何在幕后实现的.Python 是高级别的很好,但我不喜欢把它当作一个黑盒子. 考虑到这一点,如何实现元组?我看过 源代码 (tupleobject.c),但它超出了我的头脑. 我看到 PyTuple_MAXSAVESIZE = 20 和 PyTuple_MAXFREELIST = 2000,什么是保存和“空闲列表"?(长度为 20/21 或 200
..
我写了一个简单的埃拉托色尼筛法,它使用一个列表,如果不是素数,则将它们变成零,如下所示: def eSieve(n): #其中 m 是直到 n 的所有整数的定长列表'''创建一个小于或等于n的素数列表'''m = [1]*(n+1)对于 xrange(2,int((n)**0.5)+1) 中的 i:如果 m[i]:对于 xrange(i*i,n+1,i) 中的 j:m[j]=0return [i
..
标准约定是使用 if foo is None 而不是 if foo == None 来测试一个值是否具体为 None. 如果您想确定一个值是否完全是 True (不仅仅是一个类似 true 的值),是否有任何理由使用 if foo == True 而不是比if foo 为True?这在 CPython(2.x 和 3.x)、Jython、PyPy 等实现之间是否有所不同? 示例:说 T
..
鉴于零比雷埃夫斯对另一个问题的回答,我们知道了 x = tuple(set([1, "a", "b", "c", "z", "f"]))y = tuple(set(["a", "b", "c", "z", "f", 1]))打印(x == y) 使用 哈希随机化已启用.为什么是 85%? 解决方案 我假设这个问题的任何读者都读过: 零比雷埃夫斯的回答和 我对 CPython
..
我最近惊讶地发现,虽然字典在 Python 3.7+ 中可以保证保留插入顺序,但集合却不是: >>>d = {'a':1,'b':2,'c':3}>>>d{'a':1,'b':2,'c':3}>>>d['d'] = 4>>>d{'a':1,'b':2,'c':3,'d':4} >>>s = {'a', 'b', 'c'}>>>s{'b','a','c'}>>>s.add('d')>>>s{'d
..
由于 Python 3.6 中 dict 实现的变化,现在默认排序.sets 现在也保留顺序吗? 我找不到任何有关它的信息,但由于这两种数据结构在它们的底层工作方式上非常相似,我认为可能是这种情况. 我知道 dict 不能在所有情况下都被订购,但大多数情况下都是如此.如 Python 文档中所述: 这个新实现的顺序保留方面被认为是一个实现细节,不应依赖 解决方案 不,se
..
可能重复: Python“是"运算符对整数的行为异常 今天我尝试调试我的项目,经过几个小时的分析,我得到了这个: >>>(0-6) 是 -6错误的 但是, >>>(0-5) 是 -5真的 你能解释一下,为什么?也许这是某种错误或非常奇怪的行为. >linux2 上的 Python 2.7.3(默认,2012 年 4 月 24 日,00:00:54)[GCC 4.7.0 20120
..
我遇到了一个我无法解决的错误,尽管其他人报告了同样的错误. 我正在远程连接到 Linux 机器.我已经安装了最新版本的 anaconda: $ bash Anaconda2-2.4.0-Linux-x86_64.sh//安装了很多python库安装:_cache-0.0-py27_x0 ...Python 2.7.10 :: Continuum Analytics, Inc.创建默认环境.
..
我遇到了这个 - 在我看来 - 奇怪的行为: "a b c".split(maxsplit=1)类型错误:split() 不接受关键字参数 为什么 str.split() 不接受关键字参数,即使它有意义?我在 Python2 和 Python3 中都发现了这种行为. 解决方案 请参阅此错误和它的替代者. str.split() 是 CPython 中的本机函数,因此表现出描述的行
..
是否有一种合理的标准和跨平台方式将文本(甚至 PS/PDF)打印到系统定义的打印机? 假设在这里使用 CPython,不像使用 Jython 和 Java 打印 API. 解决方案 遗憾的是,没有在所有平台上使用 Python 进行打印的标准方法.所以你需要编写自己的包装函数来打印. 您需要检测运行程序的操作系统,那么: 对于 Linux - 导入子流程lpr = su
..
可能的重复: 什么时候python 对象的哈希计算,为什么-1 的哈希不同? 如果使用 Python,为什么 -1 和 -2 都会散列到相同的数字? 既然这样做了,Python 是如何区分这两个数字的? >>>-1 是 -2错误的>>>哈希(-1)是哈希(-2)真的>>>哈希(-1)-2>>>哈希(-2)-2 解决方案 -1 是 CPython 的 C 级别的保留值,它阻止
..
这是一篇受此评论启发的帖子如何在 CPython 中为对象分配内存.最初,这是在创建一个列表并在 for 循环中附加到它的上下文中相对于列表推导式. 这里是我的问题: CPython 中有多少种不同的分配器? 每个的功能是什么? malloc 什么时候被真正调用?(基于 此评论 python 在启动时为自己分配了多少内存? 是否有规则控制哪些数据结构在此内存上首先获得“di
..
我一直在努力学习 CPython 是如何在场景下实现的.Python 是高级别的很好,但我不喜欢把它当作一个黑匣子. 考虑到这一点,元组是如何实现的?我看过源(tupleobject.c),但它已经超出了我的脑海. 我看到 PyTuple_MAXSAVESIZE = 20 和 PyTuple_MAXFREELIST = 2000,什么是保存和“空闲列表"?(长度为 20/21 或 20
..
我看到有人说 python 中的 set 对象具有 O(1) 成员资格检查.它们如何在内部实施以允许这样做?它使用什么样的数据结构?该实施还有哪些其他影响? 这里的每一个答案都非常有启发性,但我只能接受一个,所以我会选择最接近我原来问题的答案.谢谢大家提供的信息! 解决方案 根据这个帖子: 确实,CPython 的集合被实现为类似于字典的东西带有虚拟值(键是集合的成员),还有一
..
可能的重复: Python“是"运算符对整数的行为出乎意料 今天我尝试调试我的项目,经过几个小时的分析,我得到了这个: >>>(0-6) 是 -6错误的 但是, >>>(0-5) 是 -5真的 你能给我解释一下,为什么?也许这是某种错误或非常奇怪的行为. >linux2 上的 Python 2.7.3(默认,2012 年 4 月 24 日,00:00:54)[GCC 4.
..
def main():对于 xrange(10**8) 中的 i:经过主要的() 这段代码在Python中运行(注:在Linux中用BASH中的time函数来计时.) real 0m1.841s用户 0m1.828s系统 0m0.012s 但是,如果 for 循环没有放在函数中, for i in xrange(10**8):经过 然后它会运行更长的时间: real 0m4.543s
..
所以我在玩 list 对象时发现了一些奇怪的事情,如果 list 是用 list() 创建的,它会使用更多的内存,比列表理解?我使用的是 Python 3.5.2 在[1]中:导入系统在 [2] 中:a = list(range(100))在 [3] 中:sys.getsizeof(a)出[3]:1008在 [4] 中:b = [i for i in range(100)]在 [5] 中:sys
..