Также стоит попробовать библиотеку readchar , которая частично основана на рецепте ActiveState, упомянутом в других ответах.
Установка:
pip install readchar
Использование:
import readchar
print("Reading a char:")
print(repr(readchar.readchar()))
print("Reading a key:")
print(repr(readchar.readkey()))
Протестировано в Windows и Linux с помощью Python 2.7.
В Windows поддерживаются только клавиши, которые сопоставляются буквам или управляющим кодам ASCII (Backspace, Enter, Esc , Tab, Ctrl + письмо ). В GNU / Linux (в зависимости от точного терминала, возможно?) Вы также получаете клавиши Insert, Delete, Pg Up, Pg Dn, Home, End и F n ... но тогда есть проблемы, разделяющие эти специальные клавиши из Esc.
Предостережение. Как и в большинстве (все?) ответы здесь, сигнальные клавиши, такие как Ctrl + C, Ctrl + D и Ctrl + Z, захватываются и возвращаются (как '\x03'
, '\x04'
и '\x1a'
соответственно); вашей программе может быть трудно отменить.
Если вам не нужно использовать NSEnumerator, вы можете использовать быстрое перечисление (которое быстрее) и краткое.
for(NSString *aKey in myDictionary) {
NSLog(@"%@", aKey);
NSLog(@"%@", [[myDictionary valueForKey:aKey] string]); //made up method
}
Также вы можете используйте Enumerator с быстрым перечислением:
NSEnumerator *enumerator = [myDictionary keyEnumerator];
for(NSString *aKey in enumerator) {
NSLog(@"%@", aKey);
NSLog(@"%@", [[myDictionary valueForKey:aKey] string]); //made up method
}
Это полезно для таких вещей, как выполнение обратного перечислителя в массиве.
Из справочника по классу NSDictionary
:
Вы можете перечислить содержимое словаря по ключу или по значению, используя
NSEnumerator
объект, возвращенныйkeyEnumerator
иobjectEnumerator
соответственно.
Другими словами:
NSEnumerator *enumerator = [myMutableDict keyEnumerator];
id aKey = nil;
while ( (aKey = [enumerator nextObject]) != nil) {
id value = [myMutableDict objectForKey:anObject];
NSLog(@"%@: %@", aKey, value);
}