Уведомления

Группа в Telegram: @pythonsu

#1 Июль 16, 2012 16:46:52

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Сокращение кода

Посоветуйте, что почитать, чтобы в строчку писать условия.
На подобие:

for info in g1.xpath_list('//*[@class="info"]'):
    info1 = str(info.text).strip()
    if info1:
        info2.append(info1)
Одним из участников форума был сокращён до строчки вида:
info = [item.strip() for item in (g1.xpath_list('//*[@class="info"]/text()'))]

Предпологаю, что данное сокращение было по схеме:
(выражение for элемент in последовательность)

Пытался сократить данный код по схеме:
(выражение for элемент1 in последовательность1 if условие1)

for info in g.xpath_list('//*[@class="info"]'):
    info1 = str(info.text).strip().replace('None', '1-1')
    if str(info1):
	info2.append(info1)
    if len(info1) > 1:
       info3.append(int(result1.split(' - ')[0])+int(info1.split(' - ')[1]))
    else:
        info3.append(info1)

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

Отредактировано paraman (Июль 16, 2012 16:47:13)

Офлайн

#2 Июль 16, 2012 17:01:58

romis
От:
Зарегистрирован: 2010-10-04
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Сокращение кода

info2 = [str(info.text).strip() for info in (g1.xpath_list('//*[@class="info"]/text()')) if str(info.text).strip()]



Офлайн

#3 Июль 16, 2012 17:35:26

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Сокращение кода

romis
info2 = [str(info.text).strip() for info in (g1.xpath_list('//*[@class="info"]/text()')) if str(info.text).strip()]

Убираем text d
g1.xpath_list('//*[@class="info"]/text()
тогда работает, а вот второе условие.
Написал так:
info2 = [str(info.text).strip() for info in (g.xpath_list('//*[@class="info"]')) if str(info.text).strip() if len(str(info.text)) > 1 info3.append(int(info.split(' - ')[0])+int(info.split(' - ')[1]))]

Но вываливается с ошибкой.

Офлайн

#4 Июль 16, 2012 17:44:04

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Сокращение кода

А смысл в таком сокращении кода?
Он становится нечитаем и уже не соответствует требованиям PEP о длине строки.



Офлайн

#5 Июль 16, 2012 17:48:50

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Сокращение кода

ActiveState Komodo IDE 7 комодо ругается, на в строчке

info2.append(info1)

indentation contains tabs

Офлайн

#6 Июль 16, 2012 17:49:23

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Сокращение кода

Lexander, тут, кажется, бессмысленно что-то объяснять. Человек не хочет понимать, что нужно осознавать, что ты пишешь, знать базовые конструкции языка, которые называются не “сокращением кода”, а, например, “списочные выражения”. И тогда не будет вопросов, почему (… if a if b x.append) не работает. Ну а писать третий раз про смысл сокращения всего и вся я, пожалуй, не буду.

Хах, подумал, что это похоже на брутфорс языка :)



Отредактировано fata1ex (Июль 16, 2012 17:55:41)

Офлайн

#7 Июль 16, 2012 22:32:47

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Сокращение кода

fata1ex
Lexander, тут, кажется, бессмысленно что-то объяснять. Человек не хочет понимать, что нужно осознавать, что ты пишешь, знать базовые конструкции языка, которые называются не “сокращением кода”, а, например, “списочные выражения”. И тогда не будет вопросов, почему (… if a if b x.append) не работает. Ну а писать третий раз про смысл сокращения всего и вся я, пожалуй, не буду.

Хах, подумал, что это похоже на брутфорс языка


fata1ex
Думаю, для начала нужно нормально изучить язык, а потом уже применять какие-то методологии.
От части с Вами соглашусь, но всем новичкам советовать одно и тоже. Какой смысл тогда вообще писать?
Я прекрасно понимаю, что без основы (теории), нет ничего. Но практика важна.

Отредактировано paraman (Июль 16, 2012 22:33:22)

Офлайн

#8 Июль 16, 2012 22:46:43

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Сокращение кода

paraman, если вы начнёте учиться бегать стометровку на руках с криками “Практика важна!”, то вряд ли получится что-нибудь дельное ) Бессмысленно пытаться решать диффуры без умения брать производную. И так далее.

А то, что многим советуется набрать базу по языку, неудивительно. Мало кто хочет действительно разобраться в чем-нибудь, лишь бы побыстрее да попроще. И это нормально. Ну и, конечно, я вряд ли назову больше 2-3 человек, которые действительно прислушались к советам на этом форуме. И это тоже нормально. Но, может, что-нибудь и откладывается :)

Ну и насчет “всем советовать одно и тоже” - это неправда.



Отредактировано fata1ex (Июль 16, 2012 22:50:45)

Офлайн

#9 Июль 16, 2012 23:45:28

paraman
Зарегистрирован: 2012-07-10
Сообщения: 170
Репутация: +  1  -
Профиль   Отправить e-mail  

Сокращение кода

И всё же, я прислушиваюсь к Вам. Пока не прочту 200 страниц, не напишу более сюда за помощью.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version