Python-da bir dəst və ya siyahının elementləri genişləndirilə və çox dəyişənlərə təyin edilə bilər. Bu, ardıcıllıqla açılma və ya açılmamış tapşırıq adlanır.
Aşağıdakı təfərrüatlar burada təsvir edilmişdir.
- Tuples və siyahıların əsaslarının açılması
- İç-içə tuples, açılmamış siyahılar
- Alt xətt ilə qablaşdırmanın açılması:
_
- Ulduz işarələri ilə qablaşdırmanın açılması:
*
Kortları, siyahıları və lüğətləri funksiya arqumentləri kimi genişləndirmək və ötürmək üçün ulduz işarələrindən istifadə haqqında məlumat üçün aşağıdakı məqaləyə baxın.
Tuples və siyahıların əsaslarının açılması
Dəyişənlər sol tərəfdə vergüllə ayrılaraq yazıldıqda, hər bir dəyişənə sağ tərəfdə dəst və ya siyahının elementi təyin edilir. Bu, həm dəstlər və siyahılar üçün eynidir (aşağıdakı nümunələr tuple şəklində yazılmışdır).
t = (0, 1, 2)
a, b, c = t
print(a)
print(b)
print(c)
# 0
# 1
# 2
l = [0, 1, 2]
a, b, c = l
print(a)
print(b)
print(c)
# 0
# 1
# 2
Qeyd edək ki, dəzgahlar dairəvi mötərizələri buraxa bildiyi üçün bu, aşağıdakı kimi bir sətirdə çoxlu dəyişənlərə çoxlu qiymətlər təyin etmək üçün istifadə edilə bilər.
a, b = 0, 1
print(a)
print(b)
# 0
# 1
Əgər dəyişənlərin sayı elementlərin sayına uyğun gəlmirsə, xəta baş verir.
# a, b = t
# ValueError: too many values to unpack (expected 2)
# a, b, c, d = t
# ValueError: not enough values to unpack (expected 4, got 3)
Əgər dəyişənlərin sayı elementlərin sayından azdırsa, qalan elementlər dəyişənin adına ulduz işarəsi əlavə etməklə siyahı kimi təyin edilə bilər (aşağıya bax).
İç-içə tuples, açılmamış siyahılar
İç-içə yığılmış dəstlər və siyahılar da açıla bilər. Əgər siz də məzmunu açmaq istəyirsinizsə, dəyişəni aşağıdakılardan birinə əlavə edin
()
[]
t = (0, 1, (2, 3, 4))
a, b, c = t
print(a)
print(b)
print(c)
# 0
# 1
# (2, 3, 4)
print(type(c))
# <class 'tuple'>
a, b, (c, d, e) = t
print(a)
print(b)
print(c)
print(d)
print(e)
# 0
# 1
# 2
# 3
# 4
_alt xətt_ ilə açılmışdır.
Python-da sadəcə açılmamış, lazım olmayan dəyərlər şərti olaraq alt xətt (alt xətt) _-ə təyin edilir. Xüsusi qrammatik məna yoxdur; onlar sadəcə olaraq _ adlı dəyişənə təyin olunurlar.
t = (0, 1, 2)
a, b, _ = t
print(a)
print(b)
print(_)
# 0
# 1
# 2
Ulduz işarələri ilə qablaşdırmanın açılması
Dəyişənlərin sayı elementlərin sayından azdırsa, dəyişən adındakı ulduz elementlərin siyahı kimi birlikdə təyin edilməsinə səbəb olacaq.
Bu sintaksis Python 3-dən bəri həyata keçirilir və Python 2-də mövcud deyil.
Elementlər əvvəldən və axırdan ulduzsuz dəyişənlərə, qalan elementlər isə ulduz işarəli dəyişənlərə siyahı kimi təyin edilir.
t = (0, 1, 2, 3, 4)
a, b, *c = t
print(a)
print(b)
print(c)
# 0
# 1
# [2, 3, 4]
print(type(c))
# <class 'list'>
a, *b, c = t
print(a)
print(b)
print(c)
# 0
# [1, 2, 3]
# 4
*a, b, c = t
print(a)
print(b)
print(c)
# [0, 1, 2]
# 3
# 4
Məsələn, bir dəyişənə və ya siyahının yalnız ilk iki elementini təyin etmək istəyirsinizsə, lazım olmayan hissələr üçün yuxarıdakı alt xəttdən istifadə edə bilərsiniz.
a, b, *_ = t
print(a)
print(b)
print(_)
# 0
# 1
# [2, 3, 4]
Eyni şeyi aşağıdakı kimi də yazmaq olar
a, b = t[0], t[1]
print(a)
print(b)
# 0
# 1
Yalnız bir ulduz əlavə edilə bilər. Ulduz işarəsi ilə işarələnmiş bir neçə dəyişən varsa, hər bir dəyişənə neçə element təyin olunduğunu müəyyən etmək mümkün olmadığı üçün SyntaxError xətası yaranır.
# *a, b, *c = t
# SyntaxError: two starred expressions in assignment
Qeyd edək ki, hətta ulduz işarəsi ilə işarələnmiş dəyişənə təyin edilmiş tək element də siyahı kimi təyin edilir.
t = (0, 1, 2)
a, b, *c = t
print(a)
print(b)
print(c)
# 0
# 1
# [2]
print(type(c))
# <class 'list'>
Əlavə elementlər yoxdursa, boş bir siyahı təyin edilir.
a, b, c, *d = t
print(a)
print(b)
print(c)
print(d)
# 0
# 1
# 2
# []