На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: RaD
  
    > [Python] Вопрос по синтаксису
      Здравствуйте всем.

      Читаю учебник по питону, парсю присваивания:
      ExpandedWrap disabled
        string = 'spam'
        q = ((a,b),(c,d)) = string[:2], string[2:]
        print (q)  # ('sp', 'am')
        print (a,b,c,d) # ('s', 'p', 'a', 'm')
         
        t = tuple(string[:2])
        print (t) # ('s', 'p')


      Как я понимаю, в q должно оказаться 2 вложенных кортежа, в которых каждый элемент должен состоять из одной буквы. А на деле вложенных кортежей нет, зато есть строки. Почему?
      Скрытый текст

      #Однако, если написать:
      ExpandedWrap disabled
        q = ((a,b),(c,d)) = tuple(string[:2]), tuple(string[2:])

      То все работает как ожидается. Я думаю, что формат должен быть предопределен стороной-реципиентом, т.е. слева. Как-то двусмысленно получается...


      И еще. Предположим, я аналогичным образом инициализирую переменные:
      [a,s,d,f] = 'qwer'

      Создается ли слева от знака равенства временный список? Если да, то, поскольку он нигде не используется (на него нет ссылок.. или есть?), он должен быть скормлен сборщику мусора со всем содержимым. Но содержимое никуда не девается. Можно ли сказать, что это "искусственный" метод сохранения вложенных объектов, работающий только в случае инициализации?
        Цитата crawler @
        q = ((a,b),(c,d)) = string[:2], string[2:]

        Это конструкция инициализации переменных одним значением (последним).
          Цитата gruy @
          Это конструкция инициализации переменных одним значением (последним).

          Ясно, спасибо.

          И почему когда кодишь ночью, когда что-то не получается, кажется, что виноват кто-то другой?.. )
            crawler на самом деле там (в присваивании) нужны не обязательно кортежи, а любые последовательности подходящей длины (в третьей версии годятся итераторы).
            Последовательностью может служить кортеж, список, строка и некоторые другие типы.

            В частности строка это последовательность символов
            1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0185 ]   [ 14 queries used ]   [ Generated: 14.05.24, 12:38 GMT ]