Задлан авах (Unpacking)
Unpacking бол tuple, list, эсвэл бусад цуглуулгын утгуудыг нэг дор хэд хэдэн хувьсагчид хуваан оноох техник юм. Энэ нь кодыг богино, цэвэр болгодог Python-ны маш хэрэгтэй онцлог.
Та аль хэдийн for нэр, оноо in жагсаалт.items(): гэж бичиж байсан бол та unpacking-г аль хэдийн ашиглаж байсан хэрэг!
Үндсэн Unpacking
Tuple Unpacking
цэг = (10, 20)
x, y = цэг
print(x) # 10
print(y) # 20
Баруун талд байгаа элементүүдийн тоо зүүн талын хувьсагчдын тоотой яг таарах ёстой — тийм биш бол ValueError гарна.
List Unpacking
List-г мөн адил задалж болно:
гурав = [1, 2, 3]
нэг, хоёр, гурав_тоо = гурав
print(нэг) # 1
print(хоёр) # 2
print(гурав_тоо) # 3
Хоёр хувьсагчийн утгыг солих
Unpacking ашиглан хоёр хувьсагчийн утгыг гуравдагч хувьсагчгүйгээр солих боломжтой — энэ бол Python-ны сайхан онцлогуудын нэг:
а = 5
б = 10
а, б = б, а
print(а) # 10
print(б) # 5
* (Star) Unpacking
Зарим элементийг нэг хувьсагчид, үлдсэнийг нөгөөд авахад * ашигладаг:
тоонууд = [1, 2, 3, 4, 5]
эхний, *дунд, сүүлийн = тоонууд
print(эхний) # 1
print(дунд) # [2, 3, 4]
print(сүүлийн) # 5
* ашигласан хувьсагч нь үргэлж list хэлбэрт байна — тэр ч байтугай хоосон байж болно:
эхний, хоёрдогч, *үлдсэн = [10, 20]
print(эхний) # 10
print(хоёрдогч) # 20
print(үлдсэн) # []
Dictionary Unpacking — **
Dictionary-н key-value хосуудыг функцийн keyword argument-д дамжуулахад ** ашигладаг:
def мэндлэх(нэр, нас, хот):
print(f"Сайн уу, {нэр}! Та {нас} настай, {хот}-аас ирсэн.")
хэрэглэгч = {"нэр": "Болд", "нас": 25, "хот": "Улаанбаатар"}
мэндлэх(**хэрэглэгч)
# Сайн уу, Болд! Та 25 настай, Улаанбаатар-аас ирсэн.
Хоёр Dictionary-г нэгтгэхэд ч ** ашиглана:
үндсэн = {"нэр": "Сарнай", "нас": 22}
нэмэлт = {"хот": "Дархан", "мэргэжил": "хөгжүүлэгч"}
бүтэн = {**үндсэн, **нэмэлт}
print(бүтэн)
# {'нэр': 'Сарнай', 'нас': 22, 'хот': 'Дархан', 'мэргэжил': 'хөгжүүлэгч'}
Функцийн *args ба **kwargs
Функц хэдэн ч argument хүлээн авах боломжтой болгоход *args ба **kwargs ашигладаг.
*args — байрлалын argument-ууд
def нэмэх(*тоонууд):
print(тоонууд) # tuple хэлбэрт ирнэ
return sum(тоонууд)
print(нэмэх(1, 2, 3)) # 6
print(нэмэх(10, 20, 30, 40)) # 100
**kwargs — keyword argument-ууд
def мэдээлэл(**утгууд):
for түлхүүр, утга in утгууд.items():
print(f"{түлхүүр}: {утга}")
мэдээлэл(нэр="Төгс", нас=30, хот="Эрдэнэт")
# нэр: Төгс
# нас: 30
# хот: Эрдэнэт
Хоёуланг хамт ашиглах
def жишээ_функц(*args, **kwargs):
print("args:", args)
print("kwargs:", kwargs)
жишээ_функц(1, 2, 3, нэр="Болд", хот="УБ")
# args: (1, 2, 3)
# kwargs: {'нэр': 'Болд', 'хот': 'УБ'}
Давталтад Unpacking
for давталтад tuple-ийн жагсаалтыг задлан авах нь маш түгээмэл хэлбэр:
сурагчид = [("Болд", 85), ("Сарнай", 92), ("Төгс", 78)]
for нэр, оноо in сурагчид:
print(f"{нэр}: {оноо} оноо")
# Болд: 85 оноо
# Сарнай: 92 оноо
# Төгс: 78 оноо
enumerate() ба zip() функцуудтай хамт ашигласан ч мөн адил:
хотууд = ["Улаанбаатар", "Дархан", "Эрдэнэт"]
for дугаар, хот in enumerate(хотууд, start=1):
print(f"{дугаар}. {хот}")
# 1. Улаанбаатар
# 2. Дархан
# 3. Эрдэнэт
Дараагийн хичээлд:
Алдаа зохицуулах (try/except) механизмыг судална — программ ажиллах явцад гарах алдаануудыг хэрхэн барьж авах, хэрэглэгчид утга бүхий мэдэгдэл харуулах, программ гэнэт унахаас хамгаалах аргуудыг үзнэ.