标签: cpython

你怎么能以编程方式告诉CPython解释器完成后进入交互模式?

如果使用-i选项调用cpython解释器,它将在完成运行的任何命令或脚本后进入交互模式.有没有办法在一个程序中让解释器执行此操作,即使它没有给出-i?明显的用例是在发生异常情况时通过交互式检查状态进行调试.

python cpython

8
推荐指数
2
解决办法
624
查看次数

覆盖Python的print语句的换行符生成行为

我有一堆遗留代码用于编码包含大量打印语句的原始电子邮件,例如

print >>f, "Content-Type: text/plain"
Run Code Online (Sandbox Code Playgroud)

这对电子邮件来说都很好,但我们现在正在利用相同的代码来输出HTTP请求.问题是Python打印语句'\n'在HTTP需要时输出'\r\n'.

看起来像Python(至少2.6.4)PRINT_NEWLINE为print语句生成一个尾随字节代码,实现为

ceval.c:1582: err = PyFile_WriteString("\n", w);
Run Code Online (Sandbox Code Playgroud)

因此,似乎没有简单的方法来覆盖print的默认换行行为.我考虑过以下解决方案

  • 写完输出后,只需做一个.replace('\n', '\r\n').这将干扰使用多部分编码的HTTP消息.
  • 在目标文件对象周围创建一个包装器并代理该.write方法
  • def write(self, data):
        if data == '\n':
            data = '\r\n'
        return self._file.write(data)
    
    Run Code Online (Sandbox Code Playgroud)

  • 写的正则表达式转换print >>f, textf.write(text + line_end)哪里line_end可以'\n''\r\n'.
  • 我认为第三种选择是最合适的.听听你的Pythonic解决问题的方法会很有趣.

    python printing cpython

    8
    推荐指数
    2
    解决办法
    6647
    查看次数

    为什么CPython在两个测试"slowspitfire"和"waf"上比PyPy更快?

    从PyPy Speed Center上发布的基准测试来看,似乎除了两个测试之外的所有测试,PyPy比CPython更快.

    在两个测试"slowspitfire"和"waf"中,CPython比PyPy更快.这是为什么?这两项测试测试的是哪种操作?是什么让CPython更快地进行这些操作?PyPy能否在这两项测试中赶上并击败CPython?

    python benchmarking pypy cpython

    8
    推荐指数
    1
    解决办法
    1207
    查看次数

    Python ++的C++向量

    我想[1,2,3,4]从C++脚本中获取一个python列表.我编写了C++脚本,它返回一个向量.

    如何在没有SWIG/SIP/Cython /等的情况下连接两端?

    将C++编译为.exe或elf文件,然后从命令行调用,让.exe创建一个包含向量的.txt并用python读取它会更容易吗?

    我的观点是,我只需要一个非常小的C++函数来对大量数据进行繁重的计算.这样做最不痛苦,最短的方法是什么?

    编辑: 举个例子.Python将为C++("foo.txt")提供一个文件名字符串,然后读取文件的上下文(200,000行乘300列),计算缺失数,然后返回Python每行的缺失量.这会产生200,000个数字的列表.如何在他们两人之间进行这种沟通?

    只是为了完整,这是我仍然想知道如何去做:

    • 将python文件名字符串传递给C++
    • 在C++中接收python字符串
    • DONE用C++创建向量
    • 将向量返回到Python
    • 在Python中接收矢量

    c++ python cpython cython

    8
    推荐指数
    2
    解决办法
    3680
    查看次数

    元组拆包与正常分配有何不同?

    这个链接我了解到了

    当前实现为-5到256之间的所有整数保留一个整数对象数组,当您在该范围内创建一个int时,实际上只返回对现有对象的引用

    但是当我尝试为我的会话提供一些示例时,我发现它在赋值和元组解包时表现不同.

    这是片段,

    Python 2.7.2 (default, Oct 11 2012, 20:14:37)
    [GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> a,b = 300,300
    >>> a is b
    True
    >>> c = 300
    >>> d = 300
    >>> c is d
    False
    >>>  
    
    Run Code Online (Sandbox Code Playgroud)

    python cpython python-2.7

    8
    推荐指数
    1
    解决办法
    114
    查看次数

    cPython是否为内置函数使用多个内核,例如sort,any,all?

    我知道cPython有一个GIL,因此如果不使用多处理模块,您的脚本就无法在多个内核上运行.但有没有什么可以阻止内置功能,如使用多核进行排序?我不明白cPython结构,但我认为我问的问题是'内置函数,如sort,any和list comprehension实际上在GIL之下?

    python cpython multiprocessing python-internals

    8
    推荐指数
    1
    解决办法
    137
    查看次数

    什么是 member_descriptor 以及如何在 Python 中访问/修改其内容?

    有人可以解释一下member_descriptor是什么以及如何从 Python 解释器访问/修改其内容吗?

    Python版本=3.6

    In [1]: import _pickle
    
    In [2]: _pickle.Pickler.dispatch_table
    Out[2]: <member 'dispatch_table' of '_pickle.Pickler' objects>
    
    In [3]: type(_pickle.Pickler.dispatch_table)
    Out[3]: member_descriptor
    
    Run Code Online (Sandbox Code Playgroud)

    我只能找到这个来解释member_descriptor。

    cpython pickle python-3.6

    8
    推荐指数
    1
    解决办法
    1843
    查看次数

    当 CPython 设置 `in` 运算符是 O(n) 时?

    我正在阅读CPython中集合操作时间复杂度,并了解到集合运算in符的平均时间复杂度为 O(1),最坏情况下的时间复杂度为 O(n)。我还了解到最坏的情况不会发生在 CPython 中,除非集合的哈希表的负载因子太高

    这让我想知道,在 CPython 实现中什么时候会发生这种情况?是否有一个简单的演示代码,它显示了一个具有明显可见的 O(n) 时间复杂度的in运算符的集合?

    python cpython set time-complexity in-operator

    8
    推荐指数
    1
    解决办法
    265
    查看次数

    Python &gt;= 3.3 内部字符串表示

    我正在研究 PEP 393 之后 Python 如何表示字符串,但我不明白 PyASCIIObject 和 PyCompactUnicodeObject 之间的区别。

    我的理解是字符串用以下结构表示:

    typedef struct {
        PyObject_HEAD
        Py_ssize_t length;          /* Number of code points in the string */
        Py_hash_t hash;             /* Hash value; -1 if not set */
        struct {
            unsigned int interned:2;
            unsigned int kind:3;
            unsigned int compact:1;
            unsigned int ascii:1;
            unsigned int ready:1;
            unsigned int :24;
        } state;
        wchar_t *wstr;              /* wchar_t representation (null-terminated) */
    } PyASCIIObject;
    
    typedef struct {
        PyASCIIObject _base;
        Py_ssize_t utf8_length;
        char *utf8;
        Py_ssize_t wstr_length;
    } PyCompactUnicodeObject; …
    Run Code Online (Sandbox Code Playgroud)

    python string cpython pep

    8
    推荐指数
    1
    解决办法
    300
    查看次数

    当没有对它的引用时,它的 finally 块中没有“await”的异步生成器会立即关闭吗?

    根据这个博客,正常的生成器在没有引用时会立即关闭。(不过是 CPython 独有的)。我的问题是“这是否适用于在 finally 块中没有‘await’的异步生成器?”

    动机

    我是一个异步库的作者,并希望异步生成器像普通的一样工作。否则,用户必须编写这样的代码

        agen = async_generator_function()
        async with async_closing(agen):
            async for v in agen:
                if some_condition:
                    break
                do_something()
    
    Run Code Online (Sandbox Code Playgroud)

    而不是这个

        async for v in async_generator_function():
            if some_condition:
                break
            do_something()
    
    Run Code Online (Sandbox Code Playgroud)

    这很烦人。幸运的是,它的单元测试总是按我的预期工作,所以我想知道它是否有保证。

    调查

    以下代码

    import asyncio
    
    async def agen_func():
        try:
            for i in range(10):
                yield i
        finally:
            print('finalized')
    
    async def main():
        async for i in agen_func():
            print(i)
            if i > 2:
                break
        print('end of main()')
    
    asyncio.run(main())
    
    Run Code Online (Sandbox Code Playgroud)

    打印

    0
    1
    2
    3
    end of main()
    finalized …
    Run Code Online (Sandbox Code Playgroud)

    asynchronous cpython python-3.x

    8
    推荐指数
    0
    解决办法
    174
    查看次数