Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C语言中的高级Python构造_Python_C_Cpython_Python C Api_Python C Extension - Fatal编程技术网

使用C语言中的高级Python构造

使用C语言中的高级Python构造,python,c,cpython,python-c-api,python-c-extension,Python,C,Cpython,Python C Api,Python C Extension,对于使用高级Python构造,例如使用C语言编写的模块中的threading.Condition和collections.deque,是否有任何最佳实践?特别是: 避免方法和成员的dict查找成本 尽可能直接访问C中的这些构造的部分 何时在本地重新实现所需功能,而不是从标准库的其他位置导入 在Python中,dict上的字符串查找非常便宜,但如果需要,可以将它们缓存在结构中 通常没有这样做的规定,因为这些库是通过Python而不是C访问的。仍然可以生成与C模块中的定义相匹配的标题,但它们需要按照

对于使用高级Python构造,例如使用C语言编写的模块中的
threading.Condition
collections.deque
,是否有任何最佳实践?特别是:

  • 避免方法和成员的dict查找成本
  • 尽可能直接访问C中的这些构造的部分
  • 何时在本地重新实现所需功能,而不是从标准库的其他位置导入
  • 在Python中,dict上的字符串查找非常便宜,但如果需要,可以将它们缓存在结构中

  • 通常没有这样做的规定,因为这些库是通过Python而不是C访问的。仍然可以生成与C模块中的定义相匹配的标题,但它们需要按照Python版本进行维护

  • 这个问题没有好的答案。可以归结为“快”与“足够快”


  • 请注意,大多数私有函数都是
    静态的
    ,因此单靠标题是不起作用的。链接器会抱怨。如果它们不被导出,它们无论如何也不会在扩展模块中工作……我还要补充一点,提问者引用的两个示例模块都是结构和算法的高级重新实现,这些结构和算法可能以某种方式在C中可用。我自己不是C黑客,但我每天都用C++编程——我已经使用了C++的STL的代码> STD::DeQue/COD>和<代码> STD::MutX < /Cube >(它们是集合的粗略类比,DeQue<代码>和<代码>线程,条件< /代码>,分别通过CpPython API;您可能希望沿着这些思路探索本地替代方案。