Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> разветвление в цикле, как записать в одну строку? 
:(
    Опции темы
PyS
Дата 29.9.2006, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 21.8.2006
Где: г. Алматы (Казахс тан)

Репутация: нет
Всего: 1



albertn,  Artemios,  это интересные моменты в программировании на питоне, но когда работаешь в группе, то лучше чтобы код был читабельным и для других. smile

Добавлено @ 13:30 
это пример для для одного elif, а если их около 10?

Добавлено @ 13:33 
вот интересный пример:
http://omsk.lug.ru/wacko/Python/Perfomance/MyTips#h448-2

PM MAIL   Вверх
albertn
Дата 29.9.2006, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Цитата(PyS @ 29.9.2006,  13:29)
albertn,  Artemios,  это интересные моменты в программировании на питоне, но когда работаешь в группе, то лучше чтобы код был читабельным и для других. smile

Добавлено @ 13:30 
это пример для для одного elif, а если их около 10?

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

Добавлено @ 13:38 
Цитата(PyS @  29.9.2006,  13:29 Найти цитируемый пост)
это пример для для одного elif, а если их около 10?

а ничего не меняется
Код

print i==1 and "1" or i==2 and "2" or i==3 and "3" or i==4 and "4" or ">=5"

Но тут нужно быть внимательнее, т.к. то, что стоит после and должно быть истинным (нельзя false, 0, None, "", (), {}, ...)
PM WWW ICQ   Вверх
Artemios
Дата 29.9.2006, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: 18
Всего: 50



Цитата(albertn @  29.9.2006,  13:24 Найти цитируемый пост)
Пробелы не там вставил

Неа, просто лишние в конце строк удалять лень было - они там значения неимеют. Где надо - стоит табуляция \t - для наглядности smile


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
albertn
Дата 29.9.2006, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Цитата(Artemios @ 29.9.2006,  13:39)
Неа, просто лишние в конце строк удалять лень было - они там значения неимеют. Где надо - стоит табуляция \t - для наглядности smile

Точно, а я и не заметил smile но наглядности все-равно я не заметил smile Нет ее вообще smile
PM WWW ICQ   Вверх
PyS
Дата 29.9.2006, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 21.8.2006
Где: г. Алматы (Казахс тан)

Репутация: нет
Всего: 1



Цитата(albertn @  29.9.2006,  16:33 Найти цитируемый пост)

а ничего не меняется

а если код:
Код
if i==1:
    e=f1()
    q1=f2()
    return f1_1(e, q1)
elif i==2:
    w=f3()
    e2=f4()
    return f2_1(e, q1)
elif i==17:
    e=f5()
    print vars()
    q1=f6()
    eee = f3_1(e, q1) or [(-1, '')]
elif i==-1:
    e=f1()
    t=f2()
    f4_1(**vars())


думаю хватит
PM MAIL   Вверх
Artemios
Дата 29.9.2006, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: 18
Всего: 50



Реально и это можно в одну строчку, только смысл?


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
PyS
Дата 29.9.2006, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 21.8.2006
Где: г. Алматы (Казахс тан)

Репутация: нет
Всего: 1



Цитата(Artemios @  29.9.2006,  16:57 Найти цитируемый пост)
Реально и это можно в одну строчку, только смысл? 

просто нужно сильно сократить код, но при этом оставить его читабельным. 
PM MAIL   Вверх
albertn
Дата 29.9.2006, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 368
Регистрация: 17.7.2006
Где: г. Ставрополь

Репутация: 30
Всего: 34



Цитата(PyS @  29.9.2006,  14:03 Найти цитируемый пост)
просто нужно сильно сократить код, но при этом оставить его читабельным.  

Главное не нарушать принципы функционального программирования при таком подходе.
Необходимо, чтобы каждая функция что-то возвращала, и не выполняла никаких побочных действий.  А что по-твоему должна возвратить та функция, которую ты предложил?

Если результатом работы функции должно быть изменение нескольких переменных, то можно сделать, чтобы возвращался список (или словарь), по которому можно смело выставить все эти значения.

Я конечно понимаю, что краткость сестра таланта, но всему есть свои пределы.

Это сообщение отредактировал(а) albertn - 29.9.2006, 14:21
PM WWW ICQ   Вверх
PyS
Дата 29.9.2006, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 21.8.2006
Где: г. Алматы (Казахс тан)

Репутация: нет
Всего: 1



Цитата(albertn @  29.9.2006,  17:20 Найти цитируемый пост)

Я конечно понимаю, что краткость сестра таланта, но всему есть свои пределы.

albertn,  Согласен!
Но когда у тебя строк так 200 -... то сильно сокращать охота. smile
albertn,  Artemios,  спасибо!
PM MAIL   Вверх
Artemios
Дата 29.9.2006, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: 18
Всего: 50



Цитата(PyS @  29.9.2006,  14:31 Найти цитируемый пост)
Но когда у тебя строк так 200

А что, это много? smile
Цитата(PyS @  29.9.2006,  14:31 Найти цитируемый пост)
albertn,  Artemios,  спасибо! 

Было б за что... smile


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
setq
Дата 29.9.2006, 15:51 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ну если все 200 строк состоят из elifов, то возможно имеет смысл заменить их на работу со словарём (как это порекомендовали в соседней теме).
  Вверх
proDiva
Дата 29.9.2006, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 19.9.2006
Где: КЧР, Россия

Репутация: 7
Всего: 7



Цитата(albertn @  29.9.2006,  14:20 Найти цитируемый пост)
Главное не нарушать принципы функционального программирования при таком подходе.

Поподробнее, пожалуйста...... smile 
Цитата(setq @  29.9.2006,  15:51 Найти цитируемый пост)
Ну если все 200 строк состоят из elifов, то возможно имеет смысл заменить их на работу со словарём

И вот здесь, пжалста))) smile 
PM MAIL ICQ   Вверх
setq
Дата 29.9.2006, 17:18 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











BAD

Код

if expr1:
    f(x)
elif expr2:
    g(x)
elif expr3:
    h(x)
elif ...


GOOD

Код

# somewhere
fdict = {
    expr1: f,
    expr2: g,
    expr3: h,
    ...

}

# somewhere else
f = fdict[expr]
f(x)

  Вверх
proDiva
Дата 30.9.2006, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 19.9.2006
Где: КЧР, Россия

Репутация: 7
Всего: 7



setq, красота одним словом, теперь так и буду писать smile 
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0522 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.