Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 28, 2014 20:00:31

vrabey
От: Киев
Зарегистрирован: 2013-04-17
Сообщения: 209
Репутация: +  23  -
Профиль   Отправить e-mail  

Генераторы списков

скажите а делают вообще так?:
например надо назначить свойство десяти кнопкам
или скопировать n файлов
используют ли для этого не цикл, а генератор
или map

def set_text(self):
    [self.but_tool[x].setText(str(x)) for x in self.but_tool]
то есть можно ли использовать генератор списков если не надо возвращать список

и ещё :
в классе можно принято ли использовать выражение с условием
не в методе
так например
class A:
    def __init__(self, n=None):
        self.n = n
        self.lab = Lab()
        if not self.n is None:
            self.lab.setText(self.n)


или всё же лучше создать метод

Отредактировано vrabey (Окт. 28, 2014 20:08:20)

Офлайн

#2 Окт. 28, 2014 22:43:09

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Генераторы списков

vrabey
используют ли для этого не цикл, а генератор
или map
Похоже на ошибку, будто имя стёрли. А код должен быть таким, чтобы понятно было при первом прочтении, что он правильный.
Когда пройдёт N лет и ты забудешь вообще, что это за программа, тогда такие остановки дадут о себе знать.

vrabey
в классе можно принято ли использовать выражение с условием
не в методе
__init__ - это обычный метод, он только не возвращает значение. Но в нём должно быть только то, что относится к инициализации экземпляра.



Офлайн

#3 Окт. 28, 2014 23:14:33

vrabey
От: Киев
Зарегистрирован: 2013-04-17
Сообщения: 209
Репутация: +  23  -
Профиль   Отправить e-mail  

Генераторы списков

py.user.next
Когда пройдёт N лет и ты забудешь вообще, что это за программа, тогда такие остановки дадут о себе знать.
то есть при использовании генератора ухудшается только читаемость?
и если случай не сложный и откоментирован то можно
я правильно понял ?

Офлайн

#4 Окт. 28, 2014 23:28:45

bs0d
Зарегистрирован: 2014-02-01
Сообщения: 76
Репутация: +  2  -
Профиль   Отправить e-mail  

Генераторы списков

py.user.next
я слаб в написании многопотока, поэтому в ините использую вызов функций, например:

class abc(object):
    def __init___(self, some_value):
        if self.abc(some_value):
            self.qwe()
...
if __name__=='__main__':
    from multiprocessing.dummy import Pool
    with Pool(20) as pool:
        pool.map(abc, some_value)

есть решение получше?

Отредактировано bs0d (Окт. 28, 2014 23:29:32)

Офлайн

#5 Окт. 28, 2014 23:34:15

bs0d
Зарегистрирован: 2014-02-01
Сообщения: 76
Репутация: +  2  -
Профиль   Отправить e-mail  

Генераторы списков

vrabey
думаю все зависит от того, насколько этот код будет использоваться в дальнейшем

раньше я делал нечто:

def load_data(filename):
    with open(filename, 'r') as file:
        data_list = [line.strip() for line in file]
        file.close()
    return data_list
r = load_data('abc.txt')
теперь не заморачиваюсь:
r = open('abc.txt').read().splitlines()

Офлайн

#6 Окт. 28, 2014 23:42:38

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Генераторы списков

vrabey
то есть при использовании генератора ухудшается только читаемость?
Не, ещё память тратится на создание списка. Всё-таки список - это не генератор.
Так что лучше переводи “list comprehension” как “списочное включение”. Потому что генератор - это вполне определённое понятие. Перевода устойчивого нет, но надо говорить так, чтобы сходу было понятно, про что речь.

Так не пишут, наверное, потому, что как раз память и тратится (время на её выделение). Лишнее выделение памяти - это плохо.

vrabey
и если случай не сложный и откоментирован то можно
Можно-то много чего, но смотри, к чему ты придёшь всё равно. Вот к чему придёшь в итоге (как все приходят), так и делай сразу.


bs0d
теперь не заморачиваюсь:
Файл не закрываешь. Он закроется, конечно, но принято использовать with, который гарантирует закрытие.

bs0d
я слаб в написании многопотока
Вот методом тыка это изучать крайне тяжело. Прочитай какую-нибудь книгу сначала.



Отредактировано py.user.next (Окт. 28, 2014 23:46:27)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version