Python:Рецепты/Распаковка последовательности в отдельные переменные: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
 
(не показано 6 промежуточных версий 1 участника)
Строка 16: Строка 16:
===№1===
===№1===


<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
p1 = (1,2,3)
p1 = (1,2,3)
a, b, c = p1
a, b, c = p1
Строка 23: Строка 23:
Результат:
Результат:


<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
>>> a
>>> a
1
1
Строка 36: Строка 36:
===№2===
===№2===


<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
p2 = ['WIKIHANDBK', 10, 100.9, (15, 4, 2020)]
p2 = ['WIKIHANDBK', 10, 100.9, (15, 4, 2020)]
site, inum, fnum, date = p2
site, inum, fnum, date = p2
Строка 43: Строка 43:
Результат:
Результат:


<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
>>> site
>>> site
'WIKIHANDBK'
'WIKIHANDBK'
Строка 58: Строка 58:
===№3===
===№3===


<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
p2 = ['WIKIHANDBK', 10, 100.9, (15, 4, 2020)]
p2 = ['WIKIHANDBK', 10, 100.9, (15, 4, 2020)]
site, inum, fnum, (day, month, year) = p2
site, inum, fnum, (day, month, year) = p2
Строка 65: Строка 65:
Результат:
Результат:


<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
>>> site
>>> site
'WIKIHANDBK'
'WIKIHANDBK'
Строка 86: Строка 86:
При не совпадении количества элементов будет сгенерировано исключение:
При не совпадении количества элементов будет сгенерировано исключение:


<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
p1 = (1,2,3)
p1 = (1,2,3)
a, b = p1
a, b = p1
Строка 93: Строка 93:
Результат:
Результат:


<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
>>> a,b = p1
>>> a,b = p1
Traceback (most recent call last):
Traceback (most recent call last):
Строка 101: Строка 101:
</syntaxhighlight>
</syntaxhighlight>


<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
p1 = (1,2,3)
p1 = (1,2,3)
a,b,c,d = p1
a,b,c,d = p1
Строка 108: Строка 108:
Результат:
Результат:


<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
>>> a,b,c,d = p1
>>> a,b,c,d = p1
Traceback (most recent call last):
Traceback (most recent call last):
Строка 115: Строка 115:
ValueError: not enough values to unpack (expected 4, got 3)
ValueError: not enough values to unpack (expected 4, got 3)
>>>  
>>>  
</syntaxhighlight>
===№5===
Распаковка работает с любым итерируемым объектом:
<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
s = 'hello'
a,b,c,d,e = s
</syntaxhighlight>
Результат:
<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
>>> a
'h'
>>> b
'e'
>>> c
'l'
>>> d
'l'
>>> e
'o'
</syntaxhighlight>
===№6===
При распаковке, иногда необходимо отбросить некоторые значения. Для этого нет специального синтаксиса, но можно просто использовать переменные, которые вы потом отбросите:
<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
p2 = ['WIKIHANDBK', 10, 100.9, (15, 4, 2020)]
_, _, _, date = p2
</syntaxhighlight>
Результат:
<syntaxhighlight lang="python" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
>>> date
(15, 4, 2020)
</syntaxhighlight>
</syntaxhighlight>


=См.также=
=См.также=
{{ads}}


=Внешние ссылки=
=Внешние ссылки=
Строка 125: Строка 163:
<references />
<references />


{{SEO
{{Навигационная таблица/Портал/Python}}
|Заголовок статьи=Python:Рецепты - Распаковка последовательности в отдельные переменные / Онлайн справочник - wikihandbk.com
|Ключевые слова=python, рецепты python, Распаковка последовательности в отдельные переменные, распаковка, распаковка последовательности
|Описание статьи=
|Изображение статьи для Open Graph=
|Адрес страницы для schemaNewsArticle=<nowiki>http://wikihandbk.com/wiki/Python:Рецепты/Распаковка последовательности в отдельные переменные</nowiki>
|Изображение статьи для schemaNewsArticle=<nowiki></nowiki>
|Высота изображения статьи для schemaNewsArticle=
|Ширина изображения статьи для schemaNewsArticle=
|Дата публикации для schemaNewsArticle=2020-04-15
|Автор=Мякишев Е.А.
|Издатель=myagkij
|Логотип издателя для schemaNewsArticle=<nowiki>http://wikihandbk.com/ruwiki/images/6/61/Tech_geek_logo_1x.jpg</nowiki>
|Ширина логотипа издателя для schemaNewsArticle=60
|Высота логотипа издателя для schemaNewsArticle=45
}}


[[Категория:Рецепты]]
[[Категория:Рецепты]]
[[Категория:Рецепты Python]]
[[Категория:Рецепты Python]]
[[Категория:Последовательности в Python]]
[[Категория:Работа с последовательностями в Python]]
[[Категория:Распаковка в Python]]
[[Категория:Работа со структурами данных в Python]]
[[Категория:Структуры данных Python]]
[[Категория:Последовательности]]
[[Категория:Работа с последовательностями]]
[[Категория:Распаковка]]
[[Категория:Работа со структурами данных]]
[[Категория:Структуры данных]]

Текущая версия от 20:06, 23 мая 2023

Проверка/Оформление/Редактирование: Мякишев Е.А.


Распаковка последовательности в отдельные переменные

Задача

Дана последовательность из N-элементов, которую необходимо распаковать в N-переменных.

Решение

Данная задача решается обычным присваиванием, но необходимо соблюсти условие - количество и структура переменных должна совпадать с таковой в последовательности.

Пример

№1

p1 = (1,2,3)
a, b, c = p1

Результат:

>>> a
1
>>> b
2
>>> c
3
>>> p1
(1, 2, 3)

№2

p2 = ['WIKIHANDBK', 10, 100.9, (15, 4, 2020)]
site, inum, fnum, date = p2

Результат:

>>> site
'WIKIHANDBK'
>>> inum
10
>>> fnum
100.9
>>> date
(15, 4, 2020)
>>> p2
['WIKIHANDBK', 10, 100.9, (15, 4, 2020)]

№3

p2 = ['WIKIHANDBK', 10, 100.9, (15, 4, 2020)]
site, inum, fnum, (day, month, year) = p2

Результат:

>>> site
'WIKIHANDBK'
>>> inum
10
>>> fnum
100.9
>>> day
15
>>> month
4
>>> year
2020
>>> p2
['WIKIHANDBK', 10, 100.9, (15, 4, 2020)]

№4

При не совпадении количества элементов будет сгенерировано исключение:

p1 = (1,2,3)
a, b = p1

Результат:

>>> a,b = p1
Traceback (most recent call last):
  File "<pyshell#31>", line 1, in <module>
    a,b = p1
ValueError: too many values to unpack (expected 2)
p1 = (1,2,3)
a,b,c,d = p1

Результат:

>>> a,b,c,d = p1
Traceback (most recent call last):
  File "<pyshell#32>", line 1, in <module>
    a,b,c,d = p1
ValueError: not enough values to unpack (expected 4, got 3)
>>>

№5

Распаковка работает с любым итерируемым объектом:

s = 'hello'
a,b,c,d,e = s

Результат:

>>> a
'h'
>>> b
'e'
>>> c
'l'
>>> d
'l'
>>> e
'o'

№6

При распаковке, иногда необходимо отбросить некоторые значения. Для этого нет специального синтаксиса, но можно просто использовать переменные, которые вы потом отбросите:

p2 = ['WIKIHANDBK', 10, 100.9, (15, 4, 2020)]
_, _, _, date = p2

Результат:

>>> date
(15, 4, 2020)

См.также

Внешние ссылки