python - 在 Python C API 中,如果未设置第二个参数,如何默认为第一个参数的值?

标签 python c cpython python-c-api

我有 x, y 参数。使用 python C API,如果 y 为 None,如何将 y 默认为 x 的值。

Python 的等价物是:

def scale(x: float, y:Optional[float]=None):
    if y is None:
       y = x

    c_scale_api(x, y)

最佳答案

只需对照 Py_None 检查即可。

static PyObject* scale(PyObject* self, PyObject* args) {
    PyObject* input2 = Py_None; // initialize to None
    double input1d, input2d;
    if (!PyArg_ParseTuple(args, "d|O", &input1d, &input2)) {
        return NULL;
    }
    if (input2 == Py_None)
    {
        input2d = input1d;
    }
    else 
    {
        input2d = PyFloat_AsDouble(input2);
    }
    return PyFloat_FromDouble(input2d);
}

这将返回第二个参数的值供您检查。

关于python - 在 Python C API 中,如果未设置第二个参数,如何默认为第一个参数的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73820465/

相关文章:

python - 在 Django 中定义模型

python - Python 导入中的命名空间

c - 用数组求和,最小值,最大值

c - 使用 GDB 调试正在运行的守护进程

python - Python 2 使用什么方法打印元组?

python - 需要关闭 python 套接字/在我的开发环境中查找当前正在运行的服务器

python - 用cartopy绘制特定国家的 map ?

c - 避免私有(private)函数的原型(prototype)声明(在使用前定义)是否违反 MISRA?

python - Python 的 reversed() 函数是如何工作的?

python - CPython的静态对象地址和碎片