🍁 Rokitsky.ru

8 фСвраля 2021 Π³.

πŸ“¦ Распаковка списков ΠΈ ΠΊΠ°Ρ€Ρ‚Π΅ΠΆΠ΅ΠΉ

Одной ΠΈΠ· ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Ρ„ΠΈΡˆΠ΅ΠΊ Python являСтся дСструктуризация списков ΠΈ ΠΊΠ°Ρ€Ρ‚Π΅ΠΆΠ΅ΠΉ. Π•Ρ‘ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ распаковкой. Распаковка позволяСт Π² ΠΎΠ΄Π½ΠΎΠΉ строчкС ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ значСния сразу нСскольким ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ.

Допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΊΠ°Ρ€Ρ‚Π΅ΠΆ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Ρ†Π²Π΅Ρ‚Π° RGB color = (66, 184, 96), с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ ΠΏΠΎΡ‚ΠΎΠΌ Π΄Π΅Π»Π°Π΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎ вычислСний ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π² стилС color[0], color[1]... ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡ…ΡƒΠ΄ΡˆΠΈΡ‚ΡŒ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ постоянно ΠΏΡƒΡ‚Π°Ρ‚ΡŒΡΡ, Π³Π΄Π΅ Ρ‚ΡƒΡ‚ красный, Π³Π΄Π΅ Π·Π΅Π»Ρ‘Π½Ρ‹ΠΉ ΠΈ синий.

Нам Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ Ρ€Π°ΡΠΊΠΈΠ΄Π°Ρ‚ΡŒ эти значСния ΠΏΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ red, green, blue:

red = color[0]
green = color[1]
blue = color[2]

Благодаря распаковкС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚ΠΎΠΆΠ΅ самоС Π² ΠΎΠ΄Π½Ρƒ строчку:

red, green, blue = color

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ распакуСт ΠΊΠ°Ρ€Ρ‚Π΅ΠΆ color ΠΈ присвоит значСния элСмСнтов ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ. Π“Π»Π°Π²Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ количСство ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… слСва Π±Ρ‹Π»ΠΎ Ρ€Π°Π²Π½ΠΎ количСству ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… справа. Если это условиС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ, Ρ‚ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π²Ρ‹ΠΊΠΈΠ½Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠ° ValueError.

Π’ΠΎΠΆΠ΅ самоС ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ со списками:

students = ['Alex', 'Josh', 'Will']
first, second, third = students

ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΡΡΡ‹Π»Π°ΡŽΡ‰ΡƒΡŽΡΡ Π½Π° ΠΊΠ°Ρ€Ρ‚Π΅ΠΆ/список. МоТно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ элСмСнты Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ.

red, green, blue = color[0], color[1], color[2]

Благодаря Ρ‚Π°ΠΊΠΎΠΌΡƒ Ρ‚Ρ€ΡŽΠΊΡƒ, ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Ρ‚ΡŒ Π΄Π²Π΅ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… значСниями:

a = 1
b = 2

a, b = b, a
# Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: a = 2, b = 1

Магия состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Python Π½Π΅ высчитываСт всС элСмСнты ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ (Π½Π°ΠΏΡ€. a = b, Π° ΠΏΠΎΡ‚ΠΎΠΌ b = a), Π° сначала высчитываСт всё справа ΠΎΡ‚ Π·Π½Π°ΠΊΠ° Ρ€Π°Π²Π½ΠΎ, Π° ΠΏΠΎΡ‚ΠΎΠΌ присваиваСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ слСва.

Π’Π°ΠΊΠΆΠ΅, Ссли Π²Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ писали for key, value in array.items(), Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ Π²Ρ‹ ΡƒΠΆΠ΅ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с распаковкой. .items() ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠ°Ρ€Ρ‚Π΅ΠΆ ΠΈΠ· Π΄Π²ΡƒΡ… элСмСнтов: ΠΊΠ»ΡŽΡ‡Π° ΠΈ значСния. И ΠΌΡ‹ распаковываСм ΠΈΡ… Π½Π° Π΄Π²Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

Π—Π°ΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎΠΉ Ρ„ΠΈΡˆΠΊΠΎΠΉ Python являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ сразу нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ return:

def func(num):
    sq = num ** 2
    db = num * 2
    return sq, db

squared, doubled = func(4)

Под ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ, Python Π·Π°ΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ sq ΠΈ db Π² ΠΊΠ°Ρ€Ρ‚Π΅ΠΆ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ. А ΠΏΠΎΡ‚ΠΎΠΌ ΠΌΡ‹ сразу ΠΆΠ΅ Π΅Π³ΠΎ распаковываСм Π½Π° Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

РаспаковываСм Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎ

Если Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния, Ρ‚ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ _. НапримСр, Ссли Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ sq, Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΅Π³ΠΎ Π½ΠΈΠΊΡƒΠ΄Π° Π½Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

_, doubled = func(4)

_ - ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ пСрСмСнная, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΊΠ°ΠΊ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π°Π·. Пока Ρ‡Ρ‚ΠΎ ΠΌΡ‹ просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Ρ‘ Π² качСствС Π·Π°Π³Π»ΡƒΡˆΠΊΠΈ.