если играете онлайн — на kgs отличная русская комната, много людей разного уровня — можно попросить разобрать партию, иногда проводят лекции. В общем забавное место, я там раньше зависал. Сейчас времени нет — забросил :(
Ну если я удаляю вызов системной функции, и вставляю свои пять строк которые делают то же самое, то я это называю переписывать.
Вы ведь, к примеру, вызываете any, а не итерируете массив? Используете defaultdict, а не делаете вручную проверки и присвоения?
ух ты. Вы правы, видимо не умею. Пропустил пробел после запятой. Причем если бы я не нашел ничего, я бы заподозрил что-то, но увы, питонисты тоже иногда забывают ставить пробелы. Посыпаю голову пеплом и снимаю этот аргумент.
В любом случае — если бы авторы считали что этот параметр нужно явно указывать, они бы не сделали его опциональным.
Я, признаться, не осознал почему написать свой велосипед лучше, чем вызвать наистандартнейшую функцию из core library. Вы другие стандартные функции тоже ручками переписываете для наглядности?
Опять же — перечитал PEP8 -> Programming Recommendations и не нашел ни малейшего упоминания о том, что не рекомендуется использовать значения по умолчанию.
Более того — сделав grep по исходникам питона, я не нашел ни одного случая чтобы там использовали get("...", None) для хешей. Просто вызовов .get(key) зато там навалом. Не все они, конечно, вызываются на dict, но какая-то часть — наверняка.
И вообще мне кажется сомнительной мысль, что разработчики бы реализовывали функцию get, а потом не рекомендовали ее использовать.
Слушайте, это не было наездом на то, что вы чего-то не знаете. Простите если вам так показалось. Мы все вначале пишем плохой код, делаем детские ошибки и прочая — это совершенно нормально. Меня просто удивляют постоянно появляющиеся на главной хабра статьи начинающиеся словами «Я начал изучать python(ruby,java,lisp...) неделю назад и решил написать статью ...».
Что касается статей, то черт его знает. Я, помнится, читал что-то из стандартного набора Learninig P. Dive into P. и Python Cookbook.
Вообще, мне кажется надо просто читать много чужого кода написанного опытными людьми и параллельно официальную питоновскую документацию. Я, когда начинал, копался в коде twisted. Код самих питоновских библиотек можно смотреть. Иногда забавно в код самого питона заглянуть. Парни из pocoo.org пишут очень хорошие либы. Пользуетесь django — читайте джанго, не знаю, правда, что там.
Плюс англоязычные блоги — можно начать с planet python, а потом сами разберетесь кого читать.
Да ладно вам, хорошо. Использовать old style классы — моветон, использовать 1 и 0 в качестве булевского выражения — моветон, писать
if 'id' in data:
return data['id']
else:
return None
вместо
return data.get('id')
бессмысленно и в 4 раза дольше.
Про то, что там в sql запросы передается данные переданные пользователем, без всякого эскейпинга, я уже не говорю — sql injection это сейчас модно в обучающих статьях, как я понимаю.
Зачем такое использовать в качестве учебного примера?
А что мешает использовать обе базы? Если ipgeobase не находит адрес, спрашиваем у maxmind. Maxmind действительно не очень хорошо работает с российскими адресами — ipgeobase в этом плане много лучше.
Хаха. Честно, я когда писал выше комент про Class этого еще не читал, так что не воспримите как личный наезд пожалуйста. Но тем не менее отличная иллюстрация )
Я вообще не очень понимаю что значит монополия на термин. Однажды человек взял и выделил некоторые принципы построение систем. Не обязательно комьютерных, у него по-моему в оригинале вообще приводился пример с клетками — Кей-то биолог в том чисе по образованию. Дал этому название.
Потом кто-то прочитал эти принципы, применил часть их в своем языке, который вышел в мейнстрим и все — теперь куча людей думает что ООП — это когда написано Class. А если его нет, то значит это и не ооп уже.
Ну это потому что из переписки. К нему обращается преподаватель программирования и говорит, что вот, под термином oop сейчас понимают черти что, а я сейчас пишу курс и поэтому хочу обратится к вам, человеку который ввел термин OOP и чтобы узнать что _вы_ вкладываете в этот термин. Поэтому логично что Key начинает ответ с to me.
Что касается года, то я не очень понял.
Разве за последние 7 лет что-то так кардинально в яве поменялось и она стала строго подходить под эти определения? Я на ней правда примерно с 2003 и не писал, но вроде слежу немного и не должен был пропустить революцию ).
Или вы имеете в виду, что может к 2010 Алан Кей одумался, понял каким дураком был 35 лет и осознал что был неправ и java это настоящее OOP? )
OOP to me means only messaging, local retention and protection and
hiding of state-process, and extreme late-binding of all things. It
can be done in Smalltalk and in LISP. There are possibly other
systems in which this is possible, but I'm not aware of them.
Cheers,
Alan
2003-07-23
Ну я в общем вот про это говорил
«I don't think it's possible to make an implementation like CPython as
fast as an engine like V8 that was designed to
be fast above all else. We've come up with some optimizations already
that would simply be too difficult to implement in CPython, and so we
had to discard them. Being a volunteer-run open-source project,
CPython requires somewhat different priorities than V8: CPython places
a heavy emphasis on simplicity, the idea being that a simple, slower
core will be easier for people to maintain in their free time than a
more complicated, faster core. I have high hopes for one of the other Python implementations to
provide a longer-term performance solution designed without the
shackles of C-level backwards compatibility. „
Так он же вроде сдулся? В смысле его допилили, он не дал такого буста как ожидалось, гугловцы написали что это потому что питон сам по себе такой медленный и ничего не поделать, и теперь его просто вольют в питон и все — никакой революции. Разве нет?
gevent умеет патчить стандарные функции для работы с сокетами, делаях их асинхронными — после этого стандарные либы автоматически начинают работать асинхронно тоже.
Вы ведь, к примеру, вызываете any, а не итерируете массив? Используете defaultdict, а не делаете вручную проверки и присвоения?
ух ты. Вы правы, видимо не умею. Пропустил пробел после запятой. Причем если бы я не нашел ничего, я бы заподозрил что-то, но увы, питонисты тоже иногда забывают ставить пробелы. Посыпаю голову пеплом и снимаю этот аргумент.
В любом случае — если бы авторы считали что этот параметр нужно явно указывать, они бы не сделали его опциональным.
Опять же — перечитал PEP8 -> Programming Recommendations и не нашел ни малейшего упоминания о том, что не рекомендуется использовать значения по умолчанию.
Более того — сделав grep по исходникам питона, я не нашел ни одного случая чтобы там использовали get("...", None) для хешей. Просто вызовов .get(key) зато там навалом. Не все они, конечно, вызываются на dict, но какая-то часть — наверняка.
И вообще мне кажется сомнительной мысль, что разработчики бы реализовывали функцию get, а потом не рекомендовали ее использовать.
Class Docstring:
D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.
Что касается статей, то черт его знает. Я, помнится, читал что-то из стандартного набора Learninig P. Dive into P. и Python Cookbook.
Вообще, мне кажется надо просто читать много чужого кода написанного опытными людьми и параллельно официальную питоновскую документацию. Я, когда начинал, копался в коде twisted. Код самих питоновских библиотек можно смотреть. Иногда забавно в код самого питона заглянуть. Парни из pocoo.org пишут очень хорошие либы. Пользуетесь django — читайте джанго, не знаю, правда, что там.
Плюс англоязычные блоги — можно начать с planet python, а потом сами разберетесь кого читать.
if 'id' in data: return data['id'] else: return Noneвместо
return data.get('id')бессмысленно и в 4 раза дольше.
Про то, что там в sql запросы передается данные переданные пользователем, без всякого эскейпинга, я уже не говорю — sql injection это сейчас модно в обучающих статьях, как я понимаю.
Зачем такое использовать в качестве учебного примера?
Потом кто-то прочитал эти принципы, применил часть их в своем языке, который вышел в мейнстрим и все — теперь куча людей думает что ООП — это когда написано Class. А если его нет, то значит это и не ооп уже.
Что касается года, то я не очень понял.
Разве за последние 7 лет что-то так кардинально в яве поменялось и она стала строго подходить под эти определения? Я на ней правда примерно с 2003 и не писал, но вроде слежу немного и не должен был пропустить революцию ).
Или вы имеете в виду, что может к 2010 Алан Кей одумался, понял каким дураком был 35 лет и осознал что был неправ и java это настоящее OOP? )
«I don't think it's possible to make an implementation like CPython as
fast as an engine like V8 that was designed to
be fast above all else. We've come up with some optimizations already
that would simply be too difficult to implement in CPython, and so we
had to discard them. Being a volunteer-run open-source project,
CPython requires somewhat different priorities than V8: CPython places
a heavy emphasis on simplicity, the idea being that a simple, slower
core will be easier for people to maintain in their free time than a
more complicated, faster core. I have high hopes for one of the other Python implementations to
provide a longer-term performance solution designed without the
shackles of C-level backwards compatibility. „