Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Python 3 (Самообучение) - вопросы.  (Прочитано 15245 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kozlone

  • Участник
  • *
  • Сообщений: 117
    • Просмотр профиля
Re: Python 3 (Самообучение) - вопросы.
« Ответ #60 : 30 Марта 2013, 15:14:04 »
...если ты про это спрашиваешь: sys.stdout.close()
именно

Оффлайн kozlone

  • Участник
  • *
  • Сообщений: 117
    • Просмотр профиля
Re: Python 3 (Самообучение) - вопросы.
« Ответ #61 : 12 Апреля 2013, 21:44:57 »
Ребят, у меня возникли трудности с пониманием функций-генераторов. Как сказано в книге, они не возвращают значение, а представляют. Т.е. как я понимаю: они просто напросто выводят значение функции на определнном этапе итерации? Это первое, второе: никак не могу въехать в такую тему - "Расширенный протокол функций-генераторов: send и next" - для чего служит метод send и когда он может использоваться (в книге есть примеры, но тем не менее я не могу понять принцип и назначение вышеописанного метода, так что желательно объяснять наиболее достпуным способом)?
Еще один момент: итератор - это объект, а генератор - это объект итератора?

« Последнее редактирование: 12 Апреля 2013, 21:53:50 от ant_avb »

Оффлайн Phlya

  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Python 3 (Самообучение) - вопросы.
« Ответ #62 : 12 Апреля 2013, 22:25:03 »
Генераторы хранят состояние, в котором их вызвали в прошлый раз, так что дважды вызвав его можно получить разные значения, последовательно следующие друг за другом, если там цикл. Примерно так, но я плохо объясняю...
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн kozlone

  • Участник
  • *
  • Сообщений: 117
    • Просмотр профиля
Re: Python 3 (Самообучение) - вопросы.
« Ответ #63 : 12 Апреля 2013, 23:44:14 »
Генераторы хранят состояние, в котором их вызвали в прошлый раз, так что дважды вызвав его можно получить разные значения, последовательно следующие друг за другом, если там цикл. Примерно так, но я плохо объясняю...
Собсна, это понятно. Спасибо. А что насчет этого:
Цитировать
итератор - это объект, а генератор - это объект итератора?

Оффлайн Phlya

  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Python 3 (Самообучение) - вопросы.
« Ответ #64 : 13 Апреля 2013, 00:09:03 »
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн kozlone

  • Участник
  • *
  • Сообщений: 117
    • Просмотр профиля
Re: Python 3 (Самообучение) - вопросы.
« Ответ #65 : 13 Апреля 2013, 15:15:44 »
Уф... Я опечален, до темы "Итераторы и генераторы" нигде не было проблем с пониманием, программный код автора читал без каких-либо трудностей, а сейчас прочитав целую главу не могу даже по памяти написать примеры из книги...

Оффлайн Phlya

  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Python 3 (Самообучение) - вопросы.
« Ответ #66 : 13 Апреля 2013, 18:39:38 »
Уф... Я опечален, до темы "Итераторы и генераторы" нигде не было проблем с пониманием, программный код автора читал без каких-либо трудностей, а сейчас прочитав целую главу не могу даже по памяти написать примеры из книги...
Насколько я понимаю, вполне можно обходиться без этих вещей. Я, по крайней мере, в своем крайне скромном опыте не сталкивался пока что с ситуациями,где это необходимо. В лучшем случае генераторные выражения типа
iterable2 = [i**2 for i in iterable]
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн kozlone

  • Участник
  • *
  • Сообщений: 117
    • Просмотр профиля
Re: Python 3 (Самообучение) - вопросы.
« Ответ #67 : 13 Апреля 2013, 19:00:25 »
Цитировать
Насколько я понимаю, вполне можно обходиться без этих вещей. Я, по крайней мере, в своем крайне скромном опыте не сталкивался пока что с ситуациями,где это необходимо. В лучшем случае генераторные выражения типа
iterable2 = [i**2 for i in iterable]
Да можно вообще обходится лишь основными инстурментами, не вникая во все тонкости, но ведь от этого пострадает производительность программы да и другие программисты, которым возможно предстоит сопровождать написанный, к примеру, мною код, будут проклинать меня благим матом. Ну да ладно, я думаю, что со временем придет понимание принципов работы объектов использующие итерационный протокол. Кстати, я спрашивал:
Цитировать
итератор - это объект, а генератор - это объект итератора?
. Марк Лутц мне сказал:
Цитировать


Оффлайн Phlya

  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Python 3 (Самообучение) - вопросы.
« Ответ #68 : 13 Апреля 2013, 19:11:42 »
Ох, тогда верьте ему =) Я так и не смог разобраться в этом, я все-таки не программист, нет времени разбираться в таких тонкостях, к сожалению(
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн kozlone

  • Участник
  • *
  • Сообщений: 117
    • Просмотр профиля
Re: Python 3 (Самообучение) - вопросы.
« Ответ #69 : 14 Апреля 2013, 02:56:29 »
Вот что до меня ну никак не доходит: есть код:
def myzip(*seqs):
    seqs = [list(S) for S in seqs]
    res = []
    while all(seqs):
        res.append(tuple(S.pop(0) for S in seqs))
    return res
Он имитирует поведение фунции zip() в версии 3.0+. Вот эта строка ставит меня в тупик -res.append(tuple(S.pop(0) for S in seqs))
Добавить элемент в список res. Элемент является нулевым в списке s из списка списков seqs. Т.е. по-идее если функции передать последовательность [1,2,3],[3,2,1], то эта строка должна добавлять кортеж из одного элемента в список res. Но она работает иначе, почему?

Оффлайн Phlya

  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Python 3 (Самообучение) - вопросы.
« Ответ #70 : 14 Апреля 2013, 09:09:50 »
А она добавляет кортеж из всех первых элементов, да? Ну, потому что выражение во внутренних скобках пробегает по всем секам и из всех добавляет первый элемент в кортеж.
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн kozlone

  • Участник
  • *
  • Сообщений: 117
    • Просмотр профиля
Re: Python 3 (Самообучение) - вопросы.
« Ответ #71 : 14 Апреля 2013, 14:10:27 »
А она добавляет кортеж из всех первых элементов, да? Ну, потому что выражение во внутренних скобках пробегает по всем секам и из всех добавляет первый элемент в кортеж.
Фкнкция zip() группирует элементы последовательности по парам. Пример:list(zip([1,2,3],[4,5,6]))Выведет: [(1, 4), (2, 5), (3, 6)]По логике должно быть так: берется первая последовательность [1,2,3], и добавляет первый элемент в кортеж, после берется следующая последовательность [4,5,6], и добавляет элемент в новый кортеж. Ведь кортежи - неизменяемы.


Пользователь решил продолжить мысль 14 Апреля 2013, 16:17:25:
Ладно, пожалуй, я просто приму то, что так и должно быть.
« Последнее редактирование: 14 Апреля 2013, 16:17:25 от ant_avb »

Оффлайн serg333b

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Re: Python 3 (Самообучение) - вопросы.
« Ответ #72 : 25 Апреля 2013, 10:54:04 »
Вот что до меня ну никак не доходит: есть код:
def myzip(*seqs):
    seqs = [list(S) for S in seqs]
    res = []
    while all(seqs):
        res.append(tuple(S.pop(0) for S in seqs))
    return res
Он имитирует поведение фунции zip() в версии 3.0+. Вот эта строка ставит меня в тупик -res.append(tuple(S.pop(0) for S in seqs))
Добавить элемент в список res. Элемент является нулевым в списке s из списка списков seqs. Т.е. по-идее если функции передать последовательность [1,2,3],[3,2,1], то эта строка должна добавлять кортеж из одного элемента в список res. Но она работает иначе, почему?
.

1. Вместо seqs = [list(S) for S in seqs] можно просто seqs = list(seqs) .
 Это превратит кортеж списков в список списков.
 А можно пропустить эту строку, так-как этот-же перебор последовательности  seqs происходит далее внутри цикла.

2.Во время   res.append(tuple(S.pop(0) for S in seqs))  сначала из последовательности seqs-ов выбираются поочереди каждый элемент,
 указателем на который  является S ,
 а из  S методом S.pop(0)    "выбивается" первый элемент .
 Т.О. S.pop(0) for S in seqs создает новую последовательность из всех первых элементов .
 Метод tuple(...) превращает новую последовательность в кортеж ,
 а метод res.append(...) добавляет полученный кортеж в конец списка res .
 Эти действия проиводятся в цикле пока не закончатся все seqs
                while all(seqs):
 Примерно так .

Оффлайн kozlone

  • Участник
  • *
  • Сообщений: 117
    • Просмотр профиля
Re: Python 3 (Самообучение) - вопросы.
« Ответ #73 : 28 Апреля 2013, 22:29:44 »
Вот что до меня ну никак не доходит: есть код:
def myzip(*seqs):
    seqs = [list(S) for S in seqs]
    res = []
    while all(seqs):
        res.append(tuple(S.pop(0) for S in seqs))
    return res
Он имитирует поведение фунции zip() в версии 3.0+. Вот эта строка ставит меня в тупик -res.append(tuple(S.pop(0) for S in seqs))
Добавить элемент в список res. Элемент является нулевым в списке s из списка списков seqs. Т.е. по-идее если функции передать последовательность [1,2,3],[3,2,1], то эта строка должна добавлять кортеж из одного элемента в список res. Но она работает иначе, почему?
.

1. Вместо seqs = [list(S) for S in seqs] можно просто seqs = list(seqs) .
 Это превратит кортеж списков в список списков.
 А можно пропустить эту строку, так-как этот-же перебор последовательности  seqs происходит далее внутри цикла.

2.Во время   res.append(tuple(S.pop(0) for S in seqs))  сначала из последовательности seqs-ов выбираются поочереди каждый элемент,
 указателем на который  является S ,
 а из  S методом S.pop(0)    "выбивается" первый элемент .
 Т.О. S.pop(0) for S in seqs создает новую последовательность из всех первых элементов .
 Метод tuple(...) превращает новую последовательность в кортеж ,
 а метод res.append(...) добавляет полученный кортеж в конец списка res .
 Эти действия проиводятся в цикле пока не закончатся все seqs
                while all(seqs):
 Примерно так .
Спасибо, Вам. :)

Оффлайн kozlone

  • Участник
  • *
  • Сообщений: 117
    • Просмотр профиля
Re: Python 3 (Самообучение) - вопросы.
« Ответ #74 : 30 Мая 2013, 18:31:42 »
А как изменить переменную окружения sys.path. К примеру, у меня есть каталог с модулями /home/name/pymodules.
Как мне сделать так, чтобы я мог в интерактивном сеансе импортировать модули из этого каталога не изменяя каждый раз переменную path?

 

Страница сгенерирована за 0.019 секунд. Запросов: 21.