gpt4 book ai didi

python - 将 bool 值传递给 Python C 扩展的 "correct"方法是什么?

转载 作者:IT老高 更新时间:2023-10-28 20:25:51 25 4
gpt4 key购买 nike

这是来自 python 文档 (http://docs.python.org/extending/extending.html) 的一个简单示例:

static PyObject *
spam_system(PyObject *self, PyObject *args)
{
const char *command;
int sts;

if (!PyArg_ParseTuple(args, "s", &command))
return NULL;
sts = system(command);
return Py_BuildValue("i", sts);
}

如果我想向函数传递一个额外的 bool 参数——“正确”的方法是什么?

似乎没有 bool 选项可以传递给 PyArg_ParseTuple()。于是我想到了以下几点:

  1. 读取一个整数并只使用该值(因为 bool 是 int 的子类)
  2. 在整数上调用 PyBool_FromLong()
  3. 读取对象并调用 PyBool_Check() 来验证它是一个 bool 值
  4. 也许有一种方法可以获取任何类型的变量并获取其真值(即空数组将是错误的等),这就是 python 函数通常所做的。

这些中的任何一个更可取吗?其他选择?

最佳答案

4 maybe there's a way to get any type of variable and get its truth value (i.e an empty array will is falsy etc.) which is what python function usually do.

是的:(来自 Python/C API Reference)

int PyObject_IsTrue(PyObject *o)

Returns 1 if the object o is considered to be true, and 0 otherwise. This is equivalent to the Python expression not not o. On failure, return -1.

编辑。为了回答实际问题,我认为方法 1 是正确的,因为 int 确实是 C 中的对应类型。方法 4 很好,但是如果您将函数记录为采用 bool,则您没有义务接受任何对象。在 Python 中,无缘无故的 3 中的显式类型检查是不受欢迎的。像 2 中那样转换为另一个 Python 对象对您的 C 代码没有帮助。

关于python - 将 bool 值传递给 Python C 扩展的 "correct"方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9316179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com