Funkcja PyArg_ParseTuple() jest zadeklarowana następująco:
int PyArg_ParseTuple(PyObject *arg, char *format, ...);
Argument arg musi być obiektem krotki zawierającym listę argumentów przekazywaną z Pythona do funkcji w C. Argument format musi być napisem formatującym, którego składnia jest objaśniona w rozdziale Wczytywanie argumentów i tworzenie wartości podręcznika Opis API Python/C. Pozostałe argumenty muszą być wskaźnikami do zmiennych odpowiedniego typu, określonego przez napis formatujący.
Należy zwrócić uwagę na to, że PyArg_ParseTuple() sprawdza, czy argumenty Pythona mają wymagane typy, nie może jednak sprawdzić prawidłowości przekazanych jej adresów w C. Jeśli błąd zostanie popełniony w tym miejscu, najprawdopodobniej spowoduje to pady programu a przynajmniej nadpisywanie przypadkowych fragmentów pamięci. Trzeba więc uważać!
Należy zwrócić uwagę, że odwołania wszystkich obiektów Pythona, które są przekazywane do procedur wywołujących są odwołaniami pożyczonymi. Nie należy zmniejszać ich licznika odwołań.
Przykładowe wywołania:
int ok;
int i, j;
long k, l;
char *s;
int size;
ok = PyArg_ParseTuple(args, "");
/* Brak argumentów */
/* Wywołanie w Pythonie: f() */
ok = PyArg_ParseTuple(args, "s", &s);
/* Napis */
/* Przykładowe wywołanie w Pythonie: f('whoops!') */
ok = PyArg_ParseTuple(args, "lls", &k, &l, &s);
/* dwie zmienne całkowite typu long oraz napis */
/* Przykładowe wywołanie w Pythonie: f(1, 2, 'trzy') */
ok = PyArg_ParseTuple(args, "(ii)s#", &i, &j, &s, &size);
/* Para liczb całkowitych oraz napis, którego rozmiar zostaje zwrócony */
/* Przykładowe wywołanie w Pythonie: f((1, 2), 'trzy') */
{
char *file;
char *mode = "r";
int bufsize = 0;
ok = PyArg_ParseTuple(args, "s|si", &file, &mode, &bufsize);
/* Napis oraz opcjonalnie drugi napis i liczba całkowita */
/* Przykładowe wywołania w Pythonie:
f('mielonka')
f('mielonka', 'w')
f('mielonka', 'wb', 100000) */
}
{
int left, top, right, bottom, h, v;
ok = PyArg_ParseTuple(args, "((ii)(ii))(ii)",
&left, &top, &right, &bottom, &h, &v);
/* Czworokąt i punkt */
/* Przykładowe wywołanie w Pythonie:
f(((0, 0), (400, 300)), (10, 10)) */
}
{
Py_complex c;
ok = PyArg_ParseTuple(args, "D:mojafunkcja", &c);
/* Liczba zespolona, z podaniem nazwy funkcji dla obsługi błędów */
/* Przykładowe wywołanie w Pythonie: mojafunkcja(1+2j) */
}
Zajrzyj do Informacji na temat tej publikacji... aby pomóc w jej rozwoju.