Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.190.153.63] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте всем.
Читаю учебник по питону, парсю присваивания: 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 вложенных кортежа, в которых каждый элемент должен состоять из одной буквы. А на деле вложенных кортежей нет, зато есть строки. Почему? Скрытый текст #Однако, если написать: q = ((a,b),(c,d)) = tuple(string[:2]), tuple(string[2:]) То все работает как ожидается. Я думаю, что формат должен быть предопределен стороной-реципиентом, т.е. слева. Как-то двусмысленно получается... И еще. Предположим, я аналогичным образом инициализирую переменные: [a,s,d,f] = 'qwer' Создается ли слева от знака равенства временный список? Если да, то, поскольку он нигде не используется (на него нет ссылок.. или есть?), он должен быть скормлен сборщику мусора со всем содержимым. Но содержимое никуда не девается. Можно ли сказать, что это "искусственный" метод сохранения вложенных объектов, работающий только в случае инициализации? |
Сообщ.
#2
,
|
|
|
Цитата crawler @ q = ((a,b),(c,d)) = string[:2], string[2:] Это конструкция инициализации переменных одним значением (последним). |
Сообщ.
#3
,
|
|
|
Цитата gruy @ Это конструкция инициализации переменных одним значением (последним). Ясно, спасибо. И почему когда кодишь ночью, когда что-то не получается, кажется, что виноват кто-то другой?.. ) |
Сообщ.
#4
,
|
|
|
crawler на самом деле там (в присваивании) нужны не обязательно кортежи, а любые последовательности подходящей длины (в третьей версии годятся итераторы).
Последовательностью может служить кортеж, список, строка и некоторые другие типы. В частности строка это последовательность символов |