die C-Funktion int get_events()
, Betrachten Rückkehr, die eine Bitmaske der folgenden Ereignisse zurück:Wie eine Funktion wickeln eine Bitmaske in Python
#define EVENT_KEY_DOWN 1
#define EVENT_KEY_UP 2
#define EVENT_KEY_PRESS 4
Es könnte 5
zurückkehren, zum Beispiel ausgelöst wurden sowohl EVENT_KEY_DOWN
und EVENT_KEY_PRESS
Bedeutung .
dachte ich über die folgenden Möglichkeiten, um den Wert aus der Funktion zu Python-Code zurück:
- "as is", dh
5
- ein Tupel von ganzen Zahlen:
(1, 4)
- ein Tupel von Strings :
('EVENT_KEY_DOWN', 'EVENT_KEY_PRESS')
(In allen Fällen I Konstanten wie erklären könnte und mymodule.EVENT_KEY_PRESS
, auch.)
Gibt es einen "empfohlenen" Weg?
In den meisten Sprachen führen Flags/Bitmasken, die als nicht ganzzahlige Typen gespeichert sind, oft zu mehr Arbeit. Das heißt, da Sie tun können, wenn 'EVENT_KEY_PRESS' in Maske: 'oder ähnliches, sehe ich keinen Nachteil Tupel von konstanten Strings in Python zu verwenden. Das heißt, ich würde eine Variable' EVENT_KEY_PRESS 'mit einigen eindeutigen deklarieren Wert, so können Sie Tippfehler in der Zeichenfolge vermeiden – Basic
Ich würde für eine Reihe von Zeichenfolgen 'set (('EVENT_KEY_UP', 'EVENT_KEY_PRESS'))' – mkiever
Das Problem ist die Änderung, wenn Sie garantieren können, dass Ihre C/Python-Definitionen sein wird Während der Lebensdauer des Projekts werden Sie ordnungsgemäß aktualisiert und synchronisiert, und Sie müssen nicht mit verschiedenen Versionen interagieren, dann verwenden Sie Bitmasken. Andernfalls wäre es eine gute Idee, sie mit Strings darzustellen. – imreal