如果使用-i选项调用cpython解释器,它将在完成运行的任何命令或脚本后进入交互模式.有没有办法在一个程序中让解释器执行此操作,即使它没有给出-i?明显的用例是在发生异常情况时通过交互式检查状态进行调试.
我有一堆遗留代码用于编码包含大量打印语句的原始电子邮件,例如
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, text到f.write(text + line_end)哪里line_end可以'\n'或'\r\n'.我认为第三种选择是最合适的.听听你的Pythonic解决问题的方法会很有趣.
从PyPy Speed Center上发布的基准测试来看,似乎除了两个测试之外的所有测试,PyPy比CPython更快.
在两个测试"slowspitfire"和"waf"中,CPython比PyPy更快.这是为什么?这两项测试测试的是哪种操作?是什么让CPython更快地进行这些操作?PyPy能否在这两项测试中赶上并击败CPython?
我想[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个数字的列表.如何在他们两人之间进行这种沟通?
只是为了完整,这是我仍然想知道如何去做:
从这个链接我了解到了
当前实现为-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) 我知道cPython有一个GIL,因此如果不使用多处理模块,您的脚本就无法在多个内核上运行.但有没有什么可以阻止内置功能,如使用多核进行排序?我不明白cPython结构,但我认为我问的问题是'内置函数,如sort,any和list comprehension实际上在GIL之下?
有人可以解释一下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中集合操作的时间复杂度,并了解到集合运算in符的平均时间复杂度为 O(1),最坏情况下的时间复杂度为 O(n)。我还了解到最坏的情况不会发生在 CPython 中,除非集合的哈希表的负载因子太高。
这让我想知道,在 CPython 实现中什么时候会发生这种情况?是否有一个简单的演示代码,它显示了一个具有明显可见的 O(n) 时间复杂度的in运算符的集合?
我正在研究 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) 根据这个博客,正常的生成器在没有引用时会立即关闭。(不过是 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) cpython ×10
python ×8
asynchronous ×1
benchmarking ×1
c++ ×1
cython ×1
in-operator ×1
pep ×1
pickle ×1
printing ×1
pypy ×1
python-2.7 ×1
python-3.6 ×1
python-3.x ×1
set ×1
string ×1