jjzjj

传递 Python 对象时,Objective-C 中的 Python-C Api 包装器因调用 __getattr__ 而崩溃

我正在用Objective-C编写一个轻量级接口(interface),它能够执行python脚本并在Objective-C和Python之间来回传递数据。我研究了PyObjC和ObjP,但都不是我要找的东西(而且因为我正在为iOS基本上我在Objective-C中创建了一个名为“ObjC_Class”的Python类型(创意,不是吗?)我希望这个Python对象几乎类似于ObjC对象。所以我决定覆盖该类的__getattr__函数,这样我就可以访问该类的ObjC等价物的任意方法和属性。代码如下:staticPyObject*ObjC_Class_getattro(ObjC_Class

CPython, Pypy, MicroPython...还在傻傻分不清楚?

哈喽大家好,我是咸鱼。当我们说Python时,通常指的是官方实现的CPython,但还有很多比如Pypy、Jython、MicroPython、Brython、RustPython等“python”。许多小伙伴看到这些带“python”的概念可能一头雾水,心想这跟我平时接触到的python有什么区别吗?这些到底是什么?那么今天这篇文章将跟大家介绍相关的概念。为什么会有这么多的'python'在开始这篇文章之前,我们首先需要了解一个东西——python是什么?python实际上是一个语言规范,这个规范定义了Python这门语言应该具备哪些语言要素,应当能完成什么样的任务。Python语言规范可以

python - 为什么 refs 在 Python 中每个新对象都会增加 2?

定义一个新对象后,交互环境中的refs数增加2对我来说有点奇怪。我只创建了一个对象,不是吗?>>>vTraceback(mostrecentcalllast):File"",line1,inNameError:name'v'isnotdefined[41830refs]>>>v="v"[41832refs] 最佳答案 您的作业是通过在globals()字典中创建一个条目来实现的,该条目以v为键,以"v"为值.这是两个引用(一个用于键,一个用于值),尽管在这种情况下它们可能都引用相同的字符串"v"。

python - 如何知道 CPython 可执行文件是否是 python 中的调试版本?

我们需要查明我们的代码是否在以编程方式启用调试的情况下构建的CPython可执行文件下运行。sys模块似乎没有任何信息,至少在Ubuntu14.04的python3.4-dbg上是这样。sys.flags.debug设置为0。原因是我们未经修改的代码实际上会导致python的调试版本崩溃。更新:特别是代码在C端崩溃并出现断言错误。肯定有比查看'd'insys.executable更好的方法。 最佳答案 下面的代码可能就是你想要的使用python3.4:>>>importsysconfig>>>sysconfig.get_config

python - 除了 CPython 之外,生产就绪的 Python 实现?

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。Improvethisquestion除了CPython,目前还有哪些Python实现可用于生产系统?问题WhataretheprosandconsofthevariousPythonimplementations?IhavebeentryingtowrapmyheadaroundthePyPyproject.So,fast-foward5-10yearsinthefuturewhatwillPyPyhavetoofferoverCPytho

python - 为什么 getpwuid 和 getgrgid 有不同的行为?

在Python2.7、3.4和3.5中,grp.getgrgid能够接受一个字符串:fromgrpimportgetgrgidprint(getgrgid('0'))但是,pwd.getpwuid不能做同样的事情:frompwdimportgetpwuidprint(getpwuid('0'))Traceback(mostrecentcalllast):File"getpwuid_test.py",line2,inprint(getpwuid('0'))TypeError:anintegerisrequired这是因为在Modules/pwdmodule.c中,getpwuid使用Py

python - 如何控制 cython cdef 类的模块/名称?

我正在使用cython将C++库公开给python,方法是将所有包装器对象和函数放在内部模块_pydynd中,然后通过不同的python模块公开它们。我想控制出现在这些扩展类中的模块和类的名称,使其看起来像dynd.nd.array,例如,而不是_pydynd.w_array,这是包装类的内部名称。cython是否有执行此操作的机制?我希望找到类似于在编写定义时如何重命名C/C++函数的内容,但我的搜索结果一无所获。生成的C++代码应该不同,这里是tp_name行:staticPyTypeObject__pyx_type_7_pydynd_w_array={PyVarObject_HE

python - python 内置函数是否总是 C 扩展(即使在 PyPy 上)?

我正在为Python编写一个文档API,我正在调用PythonDocs,而且我注意到我的静态分析套件几乎无法访问所有内置函数,因为它们几乎完全是C模块。据我所知,我想不出这条规则有任何异常(exception)。我的问题的第一部分很简单,作为内置模块是否预先假定是CPython中的C扩展?假设可能是这种情况,我编译了一个新的pypy运行时并尝试将我的项目与pypy的内置函数结合使用。我惊讶地发现这也不起作用。如果PyPy模块是纯Python,为什么不能使用AST对象?这是PyPy托管在JIT上的副作用吗? 最佳答案 PyPy由两部分

python - 为什么这个 Python 脚本在多核上的运行速度比在单核上慢 4 倍

我想了解CPython的GIL是如何工作的,以及CPython2.7.x和CPython3.4.x中的GIL有什么区别。我正在使用此代码进行基准测试:from__future__importprint_functionimportargparseimportresourceimportsysimportthreadingimporttimedefcountdown(n):whilen>0:n-=1defget_time():stats=resource.getrusage(resource.RUSAGE_SELF)total_cpu_time=stats.ru_utime+stats.

python - 如何创建 Python 模块分发以优雅地回退到纯 Python 代码

我写了一个Python模块,我有两个版本:纯Python实现和C扩展。我编写了__init__.py文件,以便它尝试导入C扩展,如果失败,它会导入纯Python代码(这合理吗?)。现在,我想知道分发此模块的最佳方式是什么(例如编写setup.py),以便有或没有构build施的人都可以轻松使用它,或使用C扩展,只需运行:pythonsetup.pyinstall我的经验有限,但我看到了两种可能的情况:用户没有在他们的机器上安装MSVisualStudio或GCC编译器套件来构建C扩展用户正在运行IronPython、Jython或CPython以外的任何软件。我只用过CPython。因