Автор: Евгений Курочкин
Архив метки: Python
MagicPython — Syntax Highlighter для SublimeText
Это syntax highlighter для Sublime Text и Atom, который поддерживает все новые языковые конструкции Python 3.5 (async def и await например) плюс type annotations, string formatting и регулярные выражения.
Sublime поддерживает Python из коробки, но с Python 3 (а особенно с Python 3.5) у него проблемы. MagicPython понимает всё.
Разметка шаблонов для форматирования строк и регулярок заслуживает отдельного упоминания — выглядит прекрасно и заметно облегчает жизнь.
Я сам использую ортодоксальный Emacs и переходить (пока) не собираюсь, но MagicPython работает исключительно хорошо и заслуживает доброго слова.
К слову, Юра (https://twitter.com/1st1) Python Core Developer и автор PEP 492 aka async/await — т.е. очень грамотный спец, который знает как делать качественные продукты.
Пользуйтесь с удовольствием.
P.S.
О редакторе Atom узнал только на этой неделе.
На первый взгляд выглядит как Sublime но при этом Open Source.
Уважаемые читатели, кто-нибудь его использует? Какие ваши впечатления?
Автор: Andrew Svetlov
Видеоуроки курса Python 2015
Курс ориентирован на людей, уже знакомых с каким-либо языком программирования, например, Java или C++.
Лектор: Сергей Лебедев.
Домашние задания
Рекомендации к оцениванию домашних заданий. Оценивать по двум критериям: корректность и идиоматичность, то есть решение должно правильно работать и соответствовать руководству по стилю.
Хорошие книги про Python
- David M. Beazley, Python Essential Reference, 2009.
- Mark Lutz, Learning Python, 5th edition, 2013 (значительная часть 4-го издания также будет релевантной).
- David M. Beazley, Brian K. Jones, Python Cookbook, 3rd edition, 2013.
Лекция 1. Начало.
Кто, когда и зачем придумал язык Python. Интерпретаторы языка. Синтаксис языка с высоты птичьего полёта. Интерактивная оболочка IPython.
Лекция 2. Всё, что вы хотели знать о функциях в Python.
Синтаксис объявления функций. Упаковка и распаковка аргументов. Ключевые аргументы и аргументы по умолчанию. Распаковка и оператор присваивания. Области видимости, правило LEGB, операторы global и nonlocal. Функциональное программирование, анонимные функции. Функции map, filter и zip. Генераторы списков, множеств и словарей. Немного о PEP 8.
Лекция 3. Декораторы и модуль functools.
Синтаксис декораторов. Декораторы с аргументами, без аргументов. Примеры использования декораторов. Модуль functools.
Лекция 4. Строки, байты, файлы и ввод/вывод.
Строковые литералы и сырые строки. Строки и Юникод. Основные методы работы со строками. Модуль string. Байты. Кодировки. Файлы и файловые объекты. Методы работы с файлами. Модуль io.
Лекция 5. Встроенные коллекции и модуль collections.
И снова встроенные коллекции: кортеж, список, множество, словарь — обход в глубину, обзор методов, примеры. Почти всё про модуль collections: именованные кортежи, счётчики, defaultdict, OrderedDict.
Лекция 6. Классы 1.
Синтаксис объявления классов. Атрибуты, связанные и несвязанные методы, __dict__, __slots__<
/code>. Статические методы и методы класса. Свойства, декоратор @property. Наследование, перегрузка методов и функция super. Декораторы классов. Магические методы.
Лекция 7. Исключения и менеджеры контекста.
Исключения, зачем они нужны и как их обрабатывать. Встроенные исключения и базовые классы BaseException и Exception. Операторы try...except..else..finally. Менеджеры контекста и модуль contextlib.
Лекция 8. Итераторы, генераторы и модуль itertools.
Два протокола итераторов: __next__ + __iter__ и __getitem__. Итераторы и цикл for, а также операторы in и not in. Генераторы, оператор-выражение yield. Генераторы как: итераторы, сопрограммы, менеджеры контекста. Модуль itertools.
Лекция 9. Модули, пакеты и система импорта.
Модули. Операторы import и from ... import. Пакеты. Относительный и абсолютный импорт. __init__-фасад. И снова оператор import - обход в глубину.
Лекция 10. Классы 2.
Дескрипторы: что-как-зачем. Конструктор __new__, класс type и метаклассы. Наследование встроенных типов. Модули abc и collections.abc.
Лекция 11. Тестирование.
Зачем тестировать? Тестирование в интерпретаторе и доктесты. Модуль unittest. Пакет py.test - на порядок лучше. Тестирование свойств и пакет hypothesis.
Лекция 12. Быстрее, Python, ещё быстрее.
Измерение времени работы кода на Python с помощью модулей timeit, cProfile и line_profiler. Немного о NumPy. JIT и AOT компиляция кода на Python на примере Numba и Cython.
Motor 0.5
Motor 0.5 (асинхронный драйвер для MongoDB) доехал до релиза.
Новая версия работает с asyncio.
Всем рекомендую
Автор: Andrew Svetlov
uvloop — альтернатива стандартному asyncio loop
Он взял libuv и построил с её помощью uvloop — asyncio совместимый event loop.
Результаты замера производительности здесь.
Получается, что uvloop в 3.5 раза быстрее стандартного и в 1.25 раза обгоняет gevent.
Т.е. абсолютный победитель по скорости в мире Python.
Библиотека пока еще не имеет стабильной версии, скоро всё будет.
Автор: Andrew Svetlov
Майкл Доусон — Программируем на Python, ответы на 4-ую главу…
Майкл Доусон — Программируем на Python.
Ответы на 4-ую главу.
Задание №1
# coding=utf-8
# Программа считает числа из заданного интервала, значения которых задает пользоваетель.itog = int(«0»)
first = int(input(«Введите начальное значение: «))
last = int(input(«Введите последнее значение: «))
interval = int(input(«Введите интервал между
целыми числами: «))
last += 1
for i in range(first, last, interval):
itog += i
print(«Сумма введеных вами чисел: «, itog)
input(«nnВведите Enter, чтобы выйти…»)
Задание №2
# coding=utf-8
# Программа, которая принимает текст
пользовательского ввода и печатает его наоборот
message = str(input(«Введите любой текст и вы
получите его наоборот: «))
new_message = «»
for i in message[::-1]:
new_message += i
print(«А вот ваш новый текст:», new_message)
input(«nnНажмите Enter, чтобы выйти из программы…»)
Задание №3
- # coding=utf-8
- import random
- # Создадим последовательность слов, из которых компьютер будет выбирать
- WORDS = («питон»,
- «анаграмма»,
- «простая»,
- «сложная»,
- «ответ»,
- «подстаканник»)
- # случайным образом выбираем из последовательности одно слово
- word = random.choice(WORDS)
- # Создадим переменную, с которой будет сопоставлена версия игрока
- correct = word
- # Создаем переменную и подсказку, которая будет появляться при запросе игрока «Не знаю»
- i_dont_know = «Не знаю»
- podskazka = word[0] + word[1] + word[2]
- # создаем анаграмму выбранного слова, в которой буквы будут расставлены хаотично
- jumble = «»
- while word:
- position = random.randrange(len(word))
- jumble += word[position]
- word = word[:position] + word[(position + 1):]
- # Создаем очки для игроков. Те, кто не использовал подсказку, получают больше.
- scores = 10
- # Начало игры
- print(
- «»»
- Добро пожаловать в игру 'Анаграммы'!
- Надо переставить буквы так, чтобы получилось осмысленное слово.
Если вам нужна подсказка введите: «Не знаю».- Но учтите, если вы не будете использовать подсказку, кол-во заработанных очков будет больше.
- (Для выхода нажмите Enter, не вводя своей версии.)
- «»»
- )
- print(«Вот анаграмма: «, jumble)
- guess = input(«nПопробуйте отгадать исходное слово: «)
- while guess != «» and guess != correct:
- if guess != correct and not guess == i_dont_know:
- print(«К сожалению, вы неправы.»)
- if guess == i_dont_know:
- scores —= 5
- print(«nПодсказка! Первые три буквы слова!», podskazka)
- guess = input(«Попробуйте отгадать исходное слово: «)
- if guess == correct:
- print(«Да, именно так! Вы отгадали!n«)
- # Если игрок слишком часто использовал подсказку (что странно, ведь она одна и та же), избегаем отрицательного значения
- # приводя к нулю
- if scores < 0:
- scores = 0
- print(«Спасибо за игру! У вас», scores, «очков!»)
- input(«nnНажмите Enter, чтобы выйти…»)
Задание №4
- # coding=utf-8
- import random
- # Создадим последовательность слов, из которых компьютер будет выбирать
- WORDS = («питон»,
- «анаграмма»,
- «простая»,
- «сложная»,
- «ответ»,
- «подстаканник»)
- # случайным образом выбираем из последовательности одно слово
- word = random.choice(WORDS)
- print(«ttЗдравствуй игрок!»)
- print(«Попробуй угадать с пяти попыток слово, которое загадал компьютер.»)
- print(«Ты можешь спрашивать, есть ли определенная буква в слове. А потом скажешь слово.»)
- print(«Итак, поехали!»)
- print(«nКоличество букв в слове:», len(word))
- # Цикл отгадывания букв
- tries = 5
- letter = ()
- while tries >= 1:
- letter = str(input(«В загаданном слове есть буква: «))
- if letter not in word:
- tries —= 1
- print(«nВы ошиблись, такой буквы нет в слове!»)
- print(» У вас осталось», tries, «попыток(ки)!»)
- if letter in word:
- tries —= 1
- print(«nВы угадали, эта буква есть в слове!»)
- print(«У вас осталось», tries, «попыток(ки)!»)
- # Вторая часть отгадывания.
- i_dont_know = «Не знаю»
- print(«nВаши 5 попыток закончились, вы готовы угадать слово?»)
- print(«Если вы сдались и не хотите продолжать, напишите 'Не знаю'.»)
- correct = (input(«nЭто слово: «))
- while correct != word:
- print(«Попробуйте еще раз!»)
- correct = (input(«nЭто слово: «))
- if correct == word:
- print(«nПоздравляю! Вы выиграли!»)
- if correct == i_dont_know:
- print(«nОчень жаль!»)
- break
- input(«nНажмите Enter, чтобы выйти…»)
Автор: Alek Azimov
