Метка «Питон»

Считается, что Питон — не очень пластичный язык. В нем нет макросов ни в одном из значений слова «макрос», нет красивых строковых миксинов, как в D, нельзя вводить свои операторы. Расширять язык можно только с помощью новых функций и классов. Фактически, программист на Питоне привязан к определенному синтаксису и, как следствие, определенному стилю решения проблем. «One way to do it». Таким образом, Питон располагает к написанию простого читаемого кода, что, естественно, очень даже хорошо. Но скучно.

К счастью, проявив некоторую фантазию, питоновский синтаксис тоже можно поломать. Например, можно сделать из Питона Лисп. Следующий пример — валидный питоновский код, который запускается интерпретатором без всякой дополнительной обработки и предсказуемо выводит в консоль "[24, 42]".

from fakelisp import *

# And now you can write Lisp
(BEGIN
	(SET (F) (LAMBDA (X)
		(IF (EQ (X) (1))
			(1)
			(MUL (X) (F (SUB (X) (1)))))))

	(SET (X) (QUOTE (F (4)) (42))))

# Back to Python any time
print "x: ", X

Читать полностью »

Простой интерпретатор с нуля на Python (часть 3)

Содержание

Простой интерпретатор с нуля на Python #1
Простой интерпретатор с нуля на Python #2
Простой интерпретатор с нуля на Python #3
Простой интерпретатор с нуля на Python #4

Разъяснение к публикации

Пользователь duse ранее выкладывал переводы двух предыдущих статей, явно намереваясь перевести всю серию. Так как тема меня очень интересует, а новых переводов нет, обратился к первоисточнику. С английским не очень силён, чтобы не терять суть, стал переводить на русский. Так и родился этот перевод. Прошу прощения у duse в случае, если мне стоило ещё чуточку потерпеть. Но для сообщества в любом случае должна быть польза.

Таким образом, мы написали лексер библиотеку комбинатора парсеров для нашего интерпретатора. В этой части, мы создадим структурные данные абстрактного синтаксического дерева (AST), и напишем парсер, используя нашу библиотеку комбинаторов, которые переводят список токенов, возвращенных лексером, в абстрактное синтаксическое дерево (AST). После того, как мы распарсим AST, запустить программу будет очень просто.

Читать полностью »

image

Предлагаю всем джангистам/алхимистам немного отвечься и почитать вольную интерпретацию вводного туториала и частично документации по Peewee – stand-alone ORM, обязательной к ознакомлению любому питонщику и, в особенности, фласкеру. Пишут о ней мало, а зря. С Peewee очень просто подружиться, особенно если вы уже знакомы с какой-нибудь ORM на ActiveRecord. Что более важно – с ней приятно дружить :) Ну, начнём.

Установка

С pip:

pip install peewee

Из репозитория:

git clone https://github.com/coleifer/peewee.git cd peewee python setup.py install

Тесты:

python setup.py test

Есть обвязка для flask:

pip install flask-peewee

Определение моделей или «попахивает джангой»

Весь нижеследующий код можно повторить один к одному в интерактивном интерпретаторе или отдельном скрипте.

from peewee import *

db = SqliteDatabase('people.db')

class Person(Model):
    name = CharField()
    birthday = DateField()
    is_relative = BooleanField()

    class Meta:
        database = db  # модель будет использовать базу данных 'people.db'

Типов полей много, на все случаи жизни. Peewee берёт на себя преобразование питоновских объектов в значения, подходящие для базы данных, и наоборот.
Читать полностью »

image

От переводчика

Весьма вольный перевод серии из трёх статей об устройстве питоновского интерпретатора. Автор занимается разработкой собственного велосипеда по этой теме и решил поделиться знаниями, появившимися в процессе. Посмотрим, что у него из этого получилось.

Данная серия статей рассчитана на тех, кто умеет писать на python в целом, но плохо представляет как этот язык устроен изнутри. Собственно, как и я три месяца назад.

Небольшой дисклеймер: свой рассказ я буду вести на примере интерпретатора python 2.7. Всё, о чем пойдёт речь далее, можно повторить и на python 3.x с поправкой на некоторые различия в синтаксисе и именование некоторых функций.

Итак, начнём.
Читать полностью »

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

В этом цикле статей я попытаюсь захватить часть этой простоты путем написания простого интерпретатора для обычного императивного языка IMP (IMperative Language). Интерпретатор будет написан на Питоне, потому что это простой и широко известный язык. Также, питон-код похож на псевдокод, и даже если вы не знаете его [питон], у вас получится понять код. Парсинг будет выполнен с помощью простого набора комбинаторов, написанных с нуля (подробнее расскажу в следующей части). Никаких дополнительных библиотек не будет использовано, кроме sys (для I/O), re (регулярные выражения в лексере) и unittest (для проверки работоспособности нашей поделки).
Читать полностью »

Давайте начистоту, все мы любим микрооптимизации. Да, как правило они бессмысленны, а иногда и вредны. Никакие хитрости не помогут, если алгоритм плох, или инструментальные средства изначально выбраны неправильно.

С другой стороны, само занятие микрооптимизацией, при поддержке, конечно же, тестов и контроле инвариантов, на нервной и пищеварительной системах сказывается исключительно благотворно. Код находится под контролем, ничего не ломается, ничего не меняется, только замеры производительности становятся все лучше и лучше. Лучше и лучше. Душеполезнейшее занятие.

В этой заметке я бы хотел поделиться замечаниями по микрооптимизации алгоритма поиска подстроки в строке использующего карту вероятностей. Все описанное касается только CPython, в других реализациях все может быть немного по-другому.
Читать полностью »

Сразу предупреждаю, те, кто учили CS в ВУЗе могут дальше не читать, интересно не будет. Статья больше для программистов-самоучек без формального образования (вроде меня самого), которые не против узнать какой-нибудь интересный факт из теоретической computer science.

Все наверняка слышали об алгоритмически-неразрешимых задачах. Эти задачи многие воспринимают как что-то очень далёкое и очень теоретическое. Между тем наткнуться на одну из них в обычной жизни не так уж и сложно.

Читать полностью »

Продолжу цикл статей «Как развлечь себя при помощи частотного словаря Википедии и интерпретатора Питона, если ничего другого под рукой нет и в ближайшее время не предвидится».
Я попробую воссоздать тот замечательный вечер, когда мой парсер Википедии отработал, я получил вожделенный словарь, открыл Питон в интерактивном режиме и начал вводить различные запросы с целью получить слова со всякими необычными свойствами. Тот, двухлетней давности, сеанс работы с шеллом, к сожалению, не сохранился, поэтому сделаю всё заново.
Читать полностью »

В написанной на днях статье Вернулся невод с тиной морскою я дал ссылку на частотный словарь Википедии. Колличество скачиваний на порядки превзошло все мои ожидания. Я почувствавал огромное духовное родство с читателями Хабра. Одна часть скачавших (как и я!) любит всячески возиться со словами и словарями, а вторая часть (как и я!), увидев на просторах сети интересный артефакт, тут же хватает его и тащит к себе в гнездо, а что с ним делать — потом разберёмся!

К первой части у меня просьба. Если Вы нашли интересное применение словарю или у вас есть идея такого применения и это всё не коммерческая тайна, поделитесь, пожалуйста, в комментариях.

А для второй части, для тех, кто скачал словарь, а теперь мучительно думает, что делать со свалившимся счастьем, я хочу написать несколько статей. Собственно с этой и начну.
Читать полностью »

Американский инженер и радиолюбитель Трэвис Гудспид (Travis Goodspeed) на конференции Summercon 2013 продемонстрировал самодельную систему автоматического наведения спутниковой тарелки на движущиеся цели. Дизайн системы он опубликовал в открытом доступе, программы для управления написаны на Питоне.

Автотрекинг низкоорбитальных спутников или Слушаем радиосигнал с МКС
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js