Простой Python. Современный стиль программирования (Любанович) - страница 289

>host = '127.0.0.1'

>port = 6789

>ctx = zmq.Context()

>pub = ctx.socket(zmq.PUB)

>pub.bind('tcp://%s:%s' % (host, port))

>sleep(1)

>with open('mammoth.txt', 'rt') as poem:

>····words = poem.read()

>for word in words.split():

>····word = word.strip(string.punctuation)

>····data = word.encode('utf-8')

>····if word.startswith(('a','e','i','o','u','A','e','i','o','u')):

>········print('vowels', data)

>········pub.send_multipart([b'vowels', data])

>····if len(word) == 5:

>········print('five', data)

>········pub.send_multipart([b'five', data])

Запустите подписчика, а затем и сонного публикатора:

>$ python poem_sub.py

>$ python poem_pub_sleep.py

Теперь у подписчика есть время на то, чтобы получить сообщения по выбранным темам. Так выглядят первые строки выходной информации:

>b'five' b'queen'

>b'vowels' b'of'

>b'five' b'Lying'

>b'vowels' b'at'

>b'vowels' b'ease'

>b'vowels' b'evening'

>b'five' b'flies'

>b'five' b'seize'

>b'vowels' b'All'

>b'five' b'gaily'

>b'five' b'great'

>b'vowels' b'admired'

Если вы не можете добавить вызов sleep() в код публикатора, вы можете синхронизировать публикатора и подписчика с помощью сокетов REQ и REP. Примеры файлов publisher.py и subscriber.py вы можете найти на GitHub.

Приложение Е. Вспомогательные таблицы

Я обнаружил, что некоторые вещи мне приходится подсматривать слишком часто. Вот несколько таблиц, которые, надеюсь, окажутся вам полезны.

Приоритет операторов

Эта таблица — ремикс официальной документации о приоритетах для Python 3, операторы с самым высоким приоритетом находятся наверху.

ОператорОписание и примеры
[v1, …], { v1, …}, { k1: v1, …}, (…)Создание или включение списка/множества/словаря/генератора, выражение в скобках
seq [n], seq [n: m], func (args…), obj.attrИндекс, разбиение, вызов функции, ссылка на атрибут
**Экспонента
'+'x, '-'x, '~'xЗнаки «плюс» и «минус», битовое НЕ
*, /, //, %Умножение, деление с плавающей точкой, целочисленное деление, напоминание
+, -Сложение, вычитание
<<, >>Битовый сдвиг вправо или влево
&Битовое И
|Битовое ИЛИ
in, not in, is, is not, <, <=, >, >=,!=, ==Проверка на членство и равенство
not xБулево (логическое) НЕ
andБулево И
orБулево ИЛИ
if … elseУсловное выражение
lambdaЛямбда-выражение

Строковые методы

Python предлагает строковые методы (могут быть использованы с любым объектом str) и модуль string, содержащий полезные определения. Воспользуемся проверочными переменными:

>>>> s = "OH, my paws and whiskers!"

>>>> t = "I'm late!"

Изменение регистра

>>>> s.capitalize()

>'Oh, my paws and whiskers!'

>>>> s.lower()

>'oh, my paws and whiskers!'

>>>> s.swapcase()

>'oh, MY PAWS AND WHISKERS!'

>>>> s.title()