Basileus
23.06.2011 14:58 iLOLYA
А какая есть самая-самая разпиздатая книга по Питону?
Recommended by:
@eurekafag
Dive into Python, лолол
Ныряй в петон
Dive into piston
Самая-самая распиздатая книга по питону — этот книга по С или С++
Для питона не существует книг, его автор настолько божественен, что он создал язык, который не требуется учить. Просто бери и пиши код.
а в бумажном виде она существует?
да
Обязательно существует.
http://docs.python.org/tutorial/
http://docs.python.org/library/
И вообще, уже давно пора понять, что книги по современному программированию слишком быстро устаревают. Вернее, программирование развивается быстрее, чем пишутся эти книги.
PHP за 24 часа :)
а разве автор ищет книг по программированию?
а по PyGtk чтонить есть?
> Python is an easy to learn, powerful programming language.
> programming language
> programming
> language
> programming
Несмешно, плохо пошутил. Даже в /5 лучше зделоли.
тебя научить вписывать в гугл "%library_name% reference"?
есть wxwidgets, tk, qt http://wiki.python.org/moin/GuiBooks
700 страниц про ткинтер, омг
wxWidgets не советую.
http://www.python.ru/files/book-ods.pdf
алсо выбирай любые http://slav0nic.org.ua/static/books/pyth...
вот тут поболе https://dl.dropbox.com/u/947782/PythonBo...
>вот тут попаболи
↑ поблевал
http://rutracker.org/forum/viewtopic.php... ДОБИВАЕМ
ну запостьте уже кто-нибудь пасту, пожалуйста.
Завтра ищешь в интернете книжку Dive into python. Похуй если ничего не поймешь. Затем идешь на python.org и изучаешь стандартную библиотеку от корки до корки. Потом зубришь, именно, сука, вызубриваешь конвенцию по написанию питоньего кода — PEP8, чтобы от зубов отскакивало. Когда напишешь свою первую имиджборду, по пути изучив верстку на html+css, скачиваешь и изучаешь любой питоний асинхронный вебсервер, рекомендую Tornado или Gevent. Как переделаешь имиджборду, чтобы выдавала по крайней мере 5 тысяч запросов в секунду, можешь идти дальше — тебя ждет увлекательный мир хайлоада. Apache Hadoop, сверхбыстрые асинхронные key-value хранилища, MapReduce. Отсос хиккующих выблядков / просто неудачников типа рейфага или сисярп/джава-хуесосов, которые сосут хуй по жизни не заставит себя ждать и уже через пол года ты будешь получать такие суммы, что любая баба будет течь при одном упоминании твоей зарплаты.
блядь, сколько бумаги испортили, сволочи.
" — Они хоть что-нибудь одобряют?
Недобор на пару минут погрузился в раздумья.
– Да. Поджоги всякие, – ответил он наконец. – У них это очень хорошо получается. Книги жгут и все такое прочее. Большие костры получаются.
Коэн был потрясен.
– Костры из книг?
– Да. Ужасно, правда?
– И не говори, – подтвердил Коэн.
Лично он считал это возмутительным. Человек, ведущий суровую, полную лишений жизнь под открытым небом, знает цену хорошей толстой книге, которая должна выдержать по меньшей мере один сезон кухонных костров, если вы будете аккуратно использовать страницы. Множество жизней было спасено в снежную ночь горстью отсыревших щепок и по-настоящему сухой книгой. А если вам захочется покурить, а трубки под рукой нет, то книга всегда к вашим услугам."
Типы данных, основные конструкции
Как получить список всех атрибутов объекта
Как получить список всех публичных атрибутов объекта
Как получить список методов объекта
В какой "магической" переменной хранится содержимое help?
Есть два кортежа, получить третий как конкатенацию первых двух
Есть два кортежа, получить третий как объединение уникальных элементов первых двух кортежей
Почему если в цикле меняется список, то используется for x in lst[:], что означает [:]?
Есть два списка одинаковой длины, в одном ключи, в другом значения. Составить словарь.
Есть два списка разной длины, в одном ключи, в другом значения. Составить словарь. Для ключей, для которых нет значений использовать None в качестве значения. Значения, для которых нет ключей игнорировать.
Есть словарь. Инвертировать его. Т.е. пары ключ: значение поменять местами — значение: ключ.
Есть строка в юникоде, получить 8-битную строку в кодировке utf-8 и cp1251
Есть строка в кодировке cp1251, получить юникодную строку
Функции
Написать функцию, которой можно передавать аргументы либо списком/кортежем, либо по одному. Функция производит суммирование всех аргументов.
>>> f(1, 2, 3)
6
>>> f([1, 2, 3])
6
>>> f((3, 5, 6))
14
>>> f(3, (5, 6))
14
Написать функцию-фабрику, которая будет возвращать функцию сложения с аргументом.
>>> add5 = addition(5) # функция addition возвращает функцию сложения с 5
>>> add5(3) # вернет 3 + 5 = 8
8
>>> add5(8) # вернет 8 + 5 = 13
13
>>> add8 = addition(8)
>>> add8(2) # вернет 2 + 8 = 10
10
>>> add8(4) # вернет 4 + 8 = 12
12
Написать варианты с обычной "внутренней" и анонимной lambda-функцией.
Написать фабрику, аналогичную п.2, но возвращающей список таких функций
>>> additionals = addition_range(0, 5) # список из функций сложения от 0 до 5 включительно
т.е. аналогичное [add0, add1, add2, add3, add4, add5]
Написать аналог map:
первым аргументом идет либо функция, либо список функций
вторым аргументом — список аргументов, которые будут переданы функциям
полагается, что эти функции — функции одного аргумента
>>> mymap([add0, add1, add2], [1, 2, 3])
[(1, 2, 3), (2, 3, 4), (3, 4, 5)]
в данном случае "развернутая" запись будет: [(add0(1), add0(2), add0(3)), (add1(1), add1(2), add1(3)), (add2(1), add2(2), add2(3))]
Итераторы
Написать функцию-генератор cycle которая бы возвращала циклический итератор.
>>> i = iter([1, 2, 3])
>>> c = cycle(i)
>>> c.next()
1
>>> c.next()
2
>>> c.next()
3
>>> c.next()
1
Написать функцию-генератор chain, которая последовательно итерирует переданные объекты (произвольное количество)
>>> i1 = iter([1, 2, 3])
>>> i2 = iter([4, 5])
>>> c = chain(i1, i2)
>>> c.next()
1
>>> c.next()
2
>>> c.next()
3
>>> c.next()
4
>>> c.next()
5
>>> c.next()
Traceback (most recent call last):
...
StopIteration
Для функций и итераторов написать доктесты
Модули
У нас есть импортированный модуль foo, как узнать физический путь файла, откуда он импортирован?
Из модуля foo вы импортируете модуль feedparser. Версия X feedparser'а есть в общесистемном каталоге site-packages, версия Y — рядом с модулем foo. Определена переменная окружения PYTHONPATH, и там тоже есть feedparser, версии Z. Какая версия будет использоваться?
Как посмотреть список каталогов, в которых Python ищет модули?
У вас есть модуль foo, внутри него импортируется модуль bar. Рядом с модулем foo есть файлы bar.py и bar/__init__.py Какой модуль будет использоваться.
Что означает и для чего используется конструкция __name__ == '__main__'
Классы
Написать базовый класс Observable, который бы позволял наследникам:
при передаче **kwargs заносить соответствующие значения как атрибуты
сделать так, чтобы при print отображались все публичные атрибуты
>>> class X(Observable):
... pass
>>> x = X(foo=1, bar=5, _bazz=12, name='Amok', props=('One', 'two'))
>>> print x
X(bar=5, foo=1, name='Amok', props=('One', 'two'))
>>> x.foo
1
>>> x.name
'Amok'
>>> x._bazz
12
Написать класс, который бы по всем внешним признакам был бы словарем, но позволял обращаться к ключам как к атрибутам.
>>> x = DictAttr([('one', 1), ('two', 2), ('three', 3)])
>>> x
{ 'one': 1, 'three': 3, 'two': 2}
>>> x['three']
3
>>> x.get('one')
1
>>> x.get('five', 'missing')
'missing'
>>> x.one
1
>>> x.five
Traceback (most recent call last):
...
AttributeError
Пункт 2 с усложнением: написать родительский класс XDictAttr так, чтобы у наследника динамически определялся ключ по наличию метода get_<KEY>.
>>> class X(XDictAttr):
... def get_foo(self):
... return 5
... def get_bar(self):
... return 12
>>> x = X({'one': 1, 'two': 2, 'three': 3})
>>> x
X: { 'one': 1, 'three': 3, 'two': 2}
>>> x['one']
1
>>> x.three
3
>>> x.bar
12
>>> x['foo']
5
>>> x.get('foo', 'missing')
5
>>> x.get('bzz', 'missing')
'missing'
Написать класс, который регистрирует свои экземпляры и предоставляет интерфейс итератора по ним
>>> x = Reg()
>>> x
<Reg instance at 0x98b6ecc>
>>> y = Reg()
>>> y
<Reg instance at 0x98b6fec>
>>> z = Reg()
<Reg instance at 0x98ba02c>
>>> for i in Reg:
... print i
<Reg instance at 0x98b6ecc>
<Reg instance at 0x98b6fec>
<Reg instance at 0x98ba02c>
Написать юнит-тесты, за основу брать тесты выше, но не ограничиваясь ими.
Метаклассы и дескрипторы
Вопросы:
Для чего используются, какие аргументы получают, что должны возвращать: методы __new__ и __init__ классов
Какие аргументы получает __new__ и __init__ у метакласса?
Задания:
Реализовать дескрипторы, которые бы фиксировали тип атрибута
>>> class Image(object):
... height = Property(0)
... width = Property(0)
... path = Property('/tmp/')
... size = Property(0)
>>> img = Image()
>>> img.height = 340
>>> img.height
340
>>> img.path = '/tmp/x00.jpeg'
>>> img.path
'/tmp/x00.jpeg'
>>> img.path = 320
Traceback (most recent call last):
...
TypeError
Реализовать базовый класс (используя метакласс), который бы фиксировал тип атрибута
>>> class Image(Object):
... height = 0
... width = 0
... path = '/tmp'
... size = 0
>>> img = Image()
>>> img.height = 340
>>> img.height
340
>>> img.path = '/tmp/x00.jpeg'
>>> img.path
'/tmp/x00.jpeg'
>>> img.path = 320
Traceback (most recent call last):
...
TypeError
Реализовать базовый класс (используя метакласс) и дескрипторы, которые бы на основе класса создавали SQL-схему (ANSI SQL) для модели:
>>> class Image(Table):
... height = Integer()
... width = Integer()
... path = Str(128)
>>> print Image.sql()
CREATE TABLE image (
height integer,
width integer,
path varchar(128)
)
реализовывать [NOT] NULL, PRIMARY KEY, FOREIGN KEY, CONSTRAINTS не нужно. Достаточно реализации двух типов: Integer и Str.