【问题标题】:What is c data type for python dictionary/object/json in Cython?Cython中python字典/对象/json的c数据类型是什么?
【发布时间】:2019-01-25 10:25:53
【问题描述】:

我有一个 .pyx 文件。要实现 Cython,我必须使用 cdef 定义变量。所以我将 python 版本定义替换为 cython 之一。

从此(.py 文件):

sql = """ SELECT * FROM vendors; """
conn = None
response = None

到这个(.pyx 文件):

cdef char[120] sql = """ SELECT * FROM vendors; """
cdef ??????? conn = None
cdef ??????? response = None

我是 Cython 的新手。我不知道 conn 和响应变量的 c 数据类型是什么。由于 conn & response 的值如下所示。

conn = psycopg2.connect(**params) 
response = json.dumps(items)

我尝试了 char[]、struct、enum,但它们导致了我的错误。 conn 和 response 的正确数据类型是什么?您能否提供有关 cython 数据类型的参考资料?

【问题讨论】:

    标签: python json postgresql cython


    【解决方案1】:

    这两个都是返回 Python 对象的 Python 函数。为它们中的任何一个指定类型都不太可能有任何优势。定义sql 的类型也很有可能没有帮助(当它传递给 Python 函数时,它无论如何都会被转换为 Python 字符串)。您可以保留 Python 代码(它仍然是有效的 Cython 代码)或指定 cdef object 作为类型。

    如果您坚持指定类型,则响应是 Python 字符串 (cdef str response)。这可能允许一些微小的优化是 Cython,但不太可能提供太多。

    conn 是一个 Psycopg2 connection object,它实际上是在 C 中定义的。您可以尝试将其包装为 an external extension type 以直接访问其属性。这不太可能是一件有用的事情 - 除非您具有要通过 Cython 探测的特定属性,否则它不会给您带来任何优势。


    这不是从 Cython 中受益的那种代码 - 它是通过 Python 接口而不是数字数据来操作 Python 对象 - 因此您不必担心添加类型。

    【讨论】:

      猜你喜欢
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-05
      • 1970-01-01
      • 2015-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多