- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
# класс ЧегоТоТамПарсер(object):
def _get_images(self, soup, basedomain):
soup = soup.get_soup()
fb_images = soup.findAll(name="meta", attrs={
"property": lambda property: property and property.lower() == "og:image"})
images = (soup.body or soup).findAll(name="img", src=True)
get_source = lambda img: img.get("content") \
if img.get("content", None) \
else img.get("src") \
if img.get("src").startswith("http://") \
else "http://"+img.get("src").lstrip("/") \
if img.get("src").startswith("//") \
else urljoin("http://"+basedomain, img.get("src").lstrip("/"))
return list(set(map(get_source, fb_images + images)))
def get_images(self):
try:
if self.basedomain:
return self._get_images(self.soup, self.basedomain)
return []
except URLError:
return []
тело в супе!
list(set( - особая уличная магия :)
F2069: Line too long (more than 1023 characters)
особенно порадовала невозможность создать литерал "aaaa...aaa" длиной больше 255 символов
E2056: String literals may have at most 255 elements (Delphi)
искалеченные судьбы
авотх*уй, еще как можно.
садись крестоносец, два.
или ты считаешь вариант с разбивкой "ааааа"+"ааааа" нихуя не тупым ограничением тупого дельфи, а наоборот, великим провидением божественного Вирта?
для тебя это тупое ограничение для меня это благо, ибо читать неформатированное говно мне совсем не интересно.
Или всё-таки через
?
Это всё будет одной непрерывной строкой и не потребует никаких действий в runtime, я часто так делал.
работает в compiletime
без рантайма + не сделать, это же операция над указателями
в с++ больше удобных и безопасных способов это сделать, разве что
А в сях... Ну, няшапроблемы, чё.
да и мой сишный компилятор 1989 года для моторолы 68к без проблем 1к литерал осиливает.
Вот студия намного хуже - она не может компилировать более 128 вложенных друг в друга свичей.
U made my day
128 вложенных свичей - разумные ограничения парсера вижуал студии
гцц без проблем и 130 осиливает (только что проверил), только кому это надо
а вот литералы по 255 символов - это, несомненно, современный язык в современной среде разработки и, несомненно, у производителя в 21 веке на то были основательнейшие причины - машины у школьников то не потянут!
жду еще обличающих фактов о говноси
а вот 128 вложенных свичей - это, несомненно, современный язык в современной среде разработки и, несомненно, у производителя в 21 веке на то были основательнейшие причины - машины у школьников то не потянут!
жду еще обличающих фактов о говнодельфи
лень было писать своё, и так копипасты хватает
вопрос знатокам
дельфя когда делает 'aaaaaa'+'bbbbbb' размещает в программе конечную склеенную строку, или делает операцию "+" в рантайме?
речь идёт о преодолении 255 байт
предлагают заводить не string (или какой там у них тип кастрирован и хранит в первом байте длину), а сишный аналог
раз сишный аналог, значит строка null-terminated и хранится где ей положено - либо в куче, если создаётся в рантайме, либо в .data, если компилятор её сам там размещает (как в С)
вот и вопрос, размещает ли он её в .data
Бьярне, вы - тормоз
> размещает ли он её в .data
константное выражение где может размещаться? в BSS?
'aaaa...a'+'bbbb...b' (каждый по 240 символов)
вариант 1) конпелятор, пользуясь помощью духов и административным ресурсом, понимает, что это мать их две константы и он прямо сейчас делает ахалай-махалай и достаёт из ширинки кролика размещает результат в виде единой строки в константном сегменте (в хексредакторе это будет непрерывной строкой aaaa.aaabbbbb..bb\0 длиной 240+240+1 символов
2) конпелятор понимает только строки по 255 символов (которых, как известно, should be enough for everyone) - а это охуенно правдоподобно, поэтому отдельно создает константную строку 'aaaa...aa', отдельно создает строку 'bbbb....b' (или может пользуясь своей магией их сразу оборачивает в тип string), затем в рантайме выполняет операцию + над этими строками string, чтобы получить где то в куче null-terminated массив символов и выдать указатель на оного
я сам удивился
даже в затертом можно сделать не TP-string длиной в сегмент
/me упорно игнорирует тот факт, что уже насрано объявлением шириной > (80 - индент) символов
Мальчик, ты тормоз. Строки в Дельфи уже лет 15 как хранят длину в int, имеют любую длину и всегда кончаются на ноль.
E2056: String literals may have at most 255 elements (Delphi) - ошибка 2009 дельфей, судя по странице
Литерал из >=256 символов надо разбивать на строки, а не писать в одну.
в С/С++ строки переносятся без операции +, причем несколькими способами (использование \ в конце строки последним символом - один из них, на который ты сагрился по неопытности), а результат размещения результата очевиден
хорошо хоть теперь и для гуру дельфи очевиден результат в их замечательной среде
Капча 6543
но на Delphi я писать ни за что не буду
?
2. Складывать константные строки произвольной длины в компайл-тайм теоретически нельзя (стандарт ограничивает, gcc помню поддерживает, но кидает ворнинг при превышении).
какой компилятор необходимо использовать непосредственно тебе?
вот у меня есть, например, mcc68k.exe, приходится использовать на работе для живых проектов - никаких C99 он не понимает, потому что был выпущен гораздо раньше, этот компилятор примерно современник турбо паскаля
но у него нет ограничений в 509 символов константной строки
равно как и нет ограничений в 6 уникальных символов для extern имён - мы бы все тут ебанулись на отличненько с этим тулкитом, если бы это было так
соответствует ли он стандарту в плане "as many as" - конечно
или ты чисто теоретически сделал вывод?
про складывать строки произвольной длины я не понял
сам же написал пример "aaa" "bbb" "ccc"
а это ведь как раз часто применяется, особенно когда
#define XNAME "SOME"
#define XVER "001"
#define XEXT ".fuck"
#define FULL_XNAME XNAME XVER XEXT
что не так то?
для вычисления детерминанта матрицы 5х5 в школьной задаче их негде применить
>всё верно
Я умываю руки.
вот вы хаете макросы, мол дерьмо, в хороших языках их нет
навеял еще один вопрос
в си я могу сделать так
#ifndef SOMEVAL
#define SOMEVAL 100
#endif
затем вызвать компилятор с аргументом -DSOMEVAL=200 и везде будет подставлено значение 200
а какие варианты для решения такой задачи есть у альтернативной секты?
#define _DEBUG 0
#endif
#if _DEBUG
#define _DEBUG_X 0
#define _DEBUG_Y 1
#define _DEBUG_Z 0
// over 9000 целей, позволяющих отлаживать конкретные логические части приложения
#endif
// где то в приложении
#if DEBUG_X
// do dome debug logging tasks
#endif
т.к. на сишечке приложение собирается максимально компактное и желательно быстродействующее, я не могу собирать логи на каждый чих в релизной версии, только в дебажной, причем на небольшое множество чихов (зачем мне логи давно отлаженного и не изменённого кода)
соответственно релизную и дебажную версию мне собирает компилятор, которому либо передаю -D_DEBUG=1, либо не передаю
А булевые флаги в Дельфи есть.
а -DAPPVERSION=1.2.3.4
типа
#if BOOST_VERSION >= 104700
#else
#endif
Булевые сравнивать нельзя.
Можно только писать что-то типа
{$IFDEF VER150} что означает, что версия компилятора 15.0 или выше.
Для версий библиотек аналогично.
ой, а как же тогда сделать простейшую булевую операцию?
#if CASE1 || CASE3
// do 1
#else
// do 2
#endif
#define _DEBUG_X 0
#define _DEBUG_Y 1
#define _DEBUG_Z 0
Фу бля говнище. Нормальный код нужно писать. На худой конец возьми частичную специализацию шаблонов С++, если не можешь по нормальному.
но ожидал, что ты умеешь читать по-русски
> например, mcc68k.exe, приходится использовать на работе для живых проектов
погугли что это за компилятор и какой язык я им компилирую
для проектов на С++ логирование давно сделано как надо и охуенно, или ты хочешь дать еще пару бесплатных советов? я послушаю
На самом деле на это мега нужная вещь. Так сишное ПО настраивается под среду, в которой компилируется. Например, так можно указать, какие библиотеки присутствуют в системе, или с интеграция с какими из них нужна. К примеру, можно собирать программы с интерфейсом GTK или QT в зависимости от флагов компиляции.
В Gentoo это фичи юзают по полной :)
Как нет? В лиспе "макросы" такие, что сишные макросы сливают по полной. Так что больше чтоб не слышал, что в хороших языках их нет.
В присутствии лисп, Nemerle, Boo и ещё некоторых языков Няшной сишке не пристало даже Някать, чтобы не позорится.
Это?
http://ideone.com/3PbH9
Ей пользуются только анимешники и задроты. Чем не аргумент?
The ANSI C Standard of 1989 requires implementations to allow as many as 31 characters in an *internal* identifier name, although they are allowed to allow longer names. But it only requires them to allow as many as 6 identifiers in an external name (e.g. a non-static function). The ISO C90 Standard (ISO/IEC 9899:1990) is identical to the ANSI C Standard if you ignore section numbering, so it's the same for ISO C.
In C99 (ISO/IEC 9899:1999), the limits were increased to 63 and 31
respectively, but hardly anyone uses C99-conforming compilers.
Вот где настоящий трэш.
?
При условии, что _get_images не генерирует сиключений...
гоню. суп же.