Đây là một ví dụ đơn giản từ các tài liệu python (http://docs.python.org/extending/extending.html):Cách "chính xác" để chuyển boolean sang phần mở rộng Python C là gì?
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);
}
Nếu tôi muốn vượt qua một tham số boolean bổ sung cho các chức năng - những gì "đúng" cách để làm điều đó?
Dường như không có tùy chọn bool để chuyển tới PyArg_ParseTuple(). Vì vậy, tôi nghĩ rằng những điều sau đây:
- đọc một số nguyên và chỉ sử dụng các giá trị (như bool là một lớp con của int)
- gọi PyBool_FromLong() trên một số nguyên
- đọc và đối tượng và gọi PyBool_Check () để xác minh nó là một bool
- có thể có cách để nhận bất kỳ loại biến nào và nhận giá trị chân lý của nó (tức là một mảng trống sẽ bị hỏng ...) là hàm python thường làm.
Bất kỳ điều nào trong số này thích hợp hơn? Sự lựa chọn khác?
Tôi đã sử dụng điều này và thấy rằng trong C tôi phải khai báo các biến là 'int' (không phải' bool'). Hoặc, khi sử dụng nhiều bool, chúng sẽ không được thiết lập đúng (có thể là một vấn đề với sự khác biệt về kích thước giữa 'bool' và' int'). – szmoore
@szmoore Nó nói rằng nó sử dụng một số nguyên trong phản ứng ở đây. – kevr
Có, nhưng thường trong C bạn có thể sử dụng 'int' và' bool' thay thế cho nhau, trong trường hợp này bạn không thể. Tôi có thể xóa nhận xét của mình nếu nhận xét đó là siêu dữ liệu. – szmoore