Ачааллж байна...
Өнгөрсөн гурван хичээлд бид дөрвөн төрөлтэй танилцлаа: int, float, string, bool. Тэднийг таних гол шинжүүдийг та одоо мэднэ: цэггүй тоо бол int, цэгтэй бол float, хашилттай бол string, True/False бол bool. Гэхдээ энэ "нүдээр таних" арга хоёр сул талтай. Нэгд — таамаг эргэлзээтэй үлддэг: "10 / 2-ын үр дүн int үү, float уу?" гэдгийг та өмнөх хичээлээс мэдэж байгаа ч, мэдэхгүй байсан бол яаж баталгаажуулах байсан бэ? Хоёрт — цаашид таны тааралдах утгууд улам "нүүр царайгүй" болно: variable дотор юу байгааг код уншаад л шууд хэлж мэдэхгүй тохиолдол олширно. Тиймээс өнөөдөр бид таамгаас баримт руу шилжинэ: type() — ямар ч утгын төрлийг Python-оос өөрөөс нь асуудаг багажтай танилцъя.
Энэ хичээл нэг талаараа онцгой: type() нь таны программуудын "ажлын эд анги" гэхээсээ илүү суралцахуйн багаж юм. print() таны программын дуу хоолой байсан бол type() бол таны — суралцагчийн — асуулт асуудаг гар юм. Өнөөдрөөс эхлэн та ямар нэг утгын төрөлд эргэлзэх бүрдээ ном сөхөх, багшаас асуух шаардлагагүй: Python өөрөө хажууд чинь сууж байгаа, түүнээс шууд асуучих. "Эргэлзвэл — type() гэж асуу" гэдэг дадал бол энэ сургалтын үлдсэн бүх хугацаанд, мөн түүнээс цааш ч таны хамгийн үнэнч зуршлуудын нэг болно.
Дэлгүүрийн кассын шошго уншигчийг төсөөлөөрэй. Худалдагч барааны төрлийг нүдээрээ таамаглаж болно — "энэ сүү шиг харагдаж байна" — гэхдээ эргэлзээтэй үед юу хийдэг вэ? Барааг уншигч руу тулгахад машин дуут дохио өгөөд дэлгэцэнд албан ёсны бүртгэлийг нь харуулна: яг юу болох нь баримтаар тодорно. type() бол Python-ы шошго уншигч юм: ямар ч утгыг "тулгахад" Python дотоод бүртгэлээ хараад албан ёсны төрлийг нь хэлж өгдөг. Таамаг хэрэггүй, маргаан байхгүй — Python утга бүрийнхээ төрлийг үргэлж яг таг мэдэж байдаг (өмнөх хичээлүүдэд бид "Python утгаас нь өөрөө үнэрлэж мэддэг" гэж ярьсныг санана уу), type() бол зүгээр л тэр мэдлэгийг бидэнтэй хуваалцуулдаг цонх юм.
Нэг зүйлийг зүйрлэлдээ нэмье: шошго уншигч барааг өөрчилдөггүй — уншуулсан сүү сүү хэвээрээ. type() ч мөн адил: асуулт бол ажиглалт, утганд юу ч тохиолддоггүй. Асуухаас айх зүйл огт байхгүй гэсэн үг.
Асуултаа асууж сурцгаая:
python
print(type(12))Үр дүн:
<class 'int'>Мөрийг задалъя — энд нэг шинэ бүтэц байгаа: давхарласан хаалт. Дотор талын type(12) нь "12-ын төрлийг тогтоо" гэсэн асуулт; гадна талын print(...) нь тэр хариултыг дэлгэцэнд хэвлэ гэсэн танил заавар. Python дотроос гадагш ажилладаг: эхлээд type(12) асуултаа бодож хариугаа гаргаад, дараа нь тэр хариу print-ийн гарт очиж хэвлэгддэг. Энэ "дотроос гадагш" журам нь Бүлэг 3-ын "хаалтан доторх эхэлж боловсрогддог" дүрмийн үргэлжлэл юм — зөвхөн энэ удаад хаалтан дотор тооцоолол биш, өөр нэг асуулт суусан байна. Ийнхүү багажуудыг бие биед нь "угсарч" хэрэглэх нь Python-ы өдөр тутмын хэв маяг бөгөөд та үүнийг эндээс эхлэн байнга харах болно.
Одоо хариултыг нь уншъя: <class 'int'>. Танд хэрэгтэй гол үг нь голд нь байна — int: "12 бол int төрөл" гэсэн баримт. Тойрсон нэмэлт хэрэглэл нь юу вэ: class гэдэг нь Python-ы дотоод хэлээр "төрөл" гэсэн үгтэй ойролцоо ойлголт бөгөөд түүний жинхэнэ, гүн утгатай бид Бүлэг 14-т — энэ сургалтын хамгийн сүүлийн том сэдэв дээр — бүрэн танилцах болно. Тэр өдрийг хүртэл та <class 'int'> гэдгийг зүгээр л "төрөл нь: int" гэж уншаад явахад бүрэн хангалттай. Хариултын хэлбэрт бүү будил — голын үгийг нь шүүж ав.
Хоёр дахь жишээ: дөрвөн төрлөө жагсаалтаар "уншуулах". Бүлгийнхээ дөрвөн танилыг нэг дор кассанд тулгая:
python
print(type(12))
print(type(1.58))
print(type("Сайн уу"))
print(type(True))Үр дүн:
<class 'int'>
<class 'float'>
<class 'str'>
<class 'bool'>Дөрвөн мөр — дөрвөн албан ёсны бүртгэл. Гурав нь хүлээлттэй чинь таарсан байх, харин гурав дахь мөрөнд нэг шинэ зүйл байна: string-ийн албан ёсны нэр str гэж гарчээ. Тийм ээ — Python дотоод бүртгэлдээ string-ийг str гэсэн товчилсон нэрээр нэрлэдэг (int нь integer-ийн товчлол байдаг шиг str нь string-ийн товчлол). Энэ str гэдэг бичиглэл танд танил байх учиртай: string-ийн хичээлийн TypeError мэдэгдэлд "can only concatenate str..." гэж яг энэ нэр гарч байсан юм. Алдааны мэдэгдлүүд төрлийг үргэлж яг ийм албан ёсны нэрээр нь дурддаг тул type()-ийн хариултуудыг унших чадвар нь алдааны мэдэгдэл унших чадвартай чинь шууд холбогддог — нэг сураад хоёр хаалга онгойлгож байна гэсэн үг.
Гурав дахь жишээ: variable-ийн доторхыг шалгах. Жинхэнэ хэрэглээ нь илт утгуудыг биш, хайрцагнуудыг шалгахад байдаг:
python
nas = 12
undur = 1.58
ner = "Сараа"
print(type(nas))
print(type(undur))
print(type(ner))Үр дүн:
<class 'int'>
<class 'float'>
<class 'str'>type(nas) гэж асуухад Python юу хийснийг мөшгье: эхлээд танил журмаараа nas хайрцгийг онгойлгож доторх 12-ыг гаргаж ирээд, тэр утгын төрлийг тогтоосон. Эндээс нэг нарийн бөгөөд чухал ойлголт: төрөл нь хайрцагных биш, доторх утгынх юм. Python-д "int зориулалттай хайрцаг" гэж байдаггүй — nas хайрцганд маргааш string хийчихэд хайрцаг дуугүй хүлээж авна, тэгээд type(nas) асуултын хариулт ч өөрчлөгдөнө (туршаад үзээрэй: nas = "арван хоёр" гээд дахин асуувал <class 'str'> гарна). Хайрцагны утга солигдож болдгийг та Бүлэг 4-өөс мэднэ — одоо түүн дээр "төрөл нь ч хамт солигдож болдог" гэсэн давхарга нэмэгдлээ. Энэ уян чанар нь Python-ы тав тух боловч хариуцлага дагуулдаг: хайрцганд чинь юу байгааг мэдэх үүрэг эцсийн дүндээ таных — эргэлзвэл асуух багаж чинь одоо гартаа байна.
Дөрөв дэх жишээ: маргаан таслагч. Одоо type()-ийг жинхэнэ зориулалтаар нь — өмнөх хичээлүүдийн эргэлзээт асуултуудыг баримтаар хаахад хэрэглэе:
python
print(type(10 / 2))
print(type("12"))
print(type(5 + 3))
print(type("5" + "3"))Үр дүн:
<class 'float'>
<class 'str'>
<class 'int'>
<class 'str'>Мөр бүр нэг хичээлийн "гэрчилгээ" болж байна. Эхнийх нь: хуваалтын хариу үргэлж float гэдгийг бид үзсэн — одоо Python өөрөө баталлаа (5.0 гэдэг нь үнэхээр float ажээ). Хоёр дахь нь: "12" бол тоо биш str — дугтуйн дүрмийн албан ёсны нотолгоо. Сүүлийн хоёр нь string хичээлийн "их мөргөлдөөний" баримтжуулалт: ижилхэн + тэмдэг нэг удаад int (8), нөгөө удаад str ("53") төрүүлж байгааг type() хоёр талд нь тамгалж өглөө. Анзаараарай — type() дотор бүтэн илэрхийлэл (10 / 2 гэх мэт) өгч болж байна: дотроос гадагш журмаараа Python эхлээд илэрхийллийг бодоод, гарсан үр дүнгийнх нь төрлийг хэлдэг. Тиймээс "энэ тооцооллын үр дүн ямар төрөлтэй гарах бол" гэсэн ямар ч асуултыг туршилтаар, секундын дотор хаах боломжтой боллоо.
Хүсвэл өөрийн "эргэлзээний жагсаалт" гаргаад үзээрэй: өнгөрсөн хичээлүүдээс төрөлд нь эргэлзэж байсан ямар ч утгаа type()-д тулгаж, таамгаа баримттай тулгах. Сонирхвол хоёр давхар асуулт асуугаад үзээрэй — print(type(type(12))) — Python "асуултын хариултын төрөл"-ийг ч хэлж чаддагийг харна (хариулт нь жаахан гүн ертөнцийн сурвалжтай тул гайхшруулж магадгүй — <class 'type'> — гэхдээ "асуулт минь ажиллаад л байна" гэдгийг мэдрэхэд хангалттай).
Алдаа 1: print-гүйгээр асуугаад "хариу алга" гэж гайхах. Хамгийн түгээмэл эргэлзээ — файлдаа ганцаараа нь бичих:
python
type(12)Үр дүн: юу ч хэвлэгдэхгүй. Алдаа ч гарахгүй, хариу ч харагдахгүй. Юу болов? type(12) асуулт ажилласан — Python хариугаа гаргасан — гэхдээ тэр хариуг хэвлэ гэж хэн ч захиагүй тул хариулт "агаарт" төрөөд, хэрэглэгдэлгүй замхарсан юм. Print()-ийн хичээлийн гол санааг саная: компьютер хийснээ хэлж өгөхгүй л бол та юу ч харахгүй. type() нь хариугаа print шиг өөрөө дэлгэцэнд гаргадаггүй — хариугаа "гартаа барьчихаад" өгөх хүнээ хүлээж зогсдог ажилтан юм. Тиймээс хариуг нь харах хоёр зам бий: print(type(12)) гэж шууд хэвлүүлэх, эсвэл turul = type(12) гэж хайрцганд хадгалаад дараа нь хэвлэх. Файл дотор ажиллаж байгаа бол дүрэм энгийн: харах гэсэн бүхнээ print-ээр ор.
Алдаа 2: Хаалтын тоог алдах. Давхар хаалттай бүтэцд хаалт "гээгдэх" нь амархан:
python
print(type(12)Python:
SyntaxError: '(' was never closedОрчуулбал: "хаалт хэзээ ч хаагдаагүй." Print()-ийн хичээлд бид энэ мэдэгдэлтэй нэг мөр танилцсан — одоо давхар хаалттай орчинд дахин уулзлаа. Энд гурван хаалт нээгдэх ёстой газар... үгүй ээ, тоолъё: print-ийн нэг нээлт, type-ийн нэг нээлт — хоёр нээлт, тиймээс хоёр хаалт хэрэгтэй байтал нэг л хаалт бичигджээ. Багажууд угсрагдах тусам хаалтууд "давхарладаг" тул тоолох дадал хэрэгтэй болно. Азаар VS Code энд хоёр аргаар тусалдаг: нээлт бичихэд хаалтыг нь өөрөө нэмдэг (та анзаарсан байх), мөн курсорыг хаалтан дээр тавихад хосыг нь өнгөөр тодруулж үзүүлдэг — аль нээлт аль хаалттай "гэрлэсэн" болохыг нүдээр шалгаж болно гэсэн үг.
Алдаа 3: Төрлийн нэрийг хашилттай харьцуулах гэж оролдох. Түрүүлж гүйсэн сониуч суралцагчид ийм зүйл бичих нь бий:
python
nas = 12
print(type(nas) == "int")Үр дүн:
FalseАлдааны мэдэгдэлгүй — гэхдээ хариулт нь хүлээлтийг эвддэг: nas үнэхээр int байтал "худлаа" гэж гарчихлаа. (== гэдэг нь "тэнцүү юү?" гэсэн асуулт бөгөөд bool хичээлд танилцсан "асуулт -> True/False хариу" гэр бүлийн гишүүн — бүрэн хичээл нь Бүлэг 6-д бий.) Учир нь: type()-ийн хариулт бол "int" гэсэн бичвэр биш — Python-ы дотоод "төрөл" гэдэг тусгай зүйл өөрөө юм. Дэлгэцэнд <class 'int'> гэж харагддаг нь хэвлэгдэхдээ тийм дүрстэй гардаг хэрэг болохоос, мөн чанартаа string биш. Тиймээс түүнийг "int" гэсэн string-тэй тулгахад "хоёр өөр ертөнцийн зүйлс — тэнцэхгүй" гэж False гарсан хэрэг. Зөв харьцуулах арга байдаг (type(nas) == int — хашилтгүйгээр, төрлийн нэрийг нь шууд бичиж), гэхдээ энэ хэрэглээ танд одоохондоо хэрэг болохгүй тул зөвхөн сургамжийг нь авч үлдье: дэлгэц дээрх дүрс төрлийг нь хэлдэггүй — "харагдах" ба "байх" хоёр өөр гэдгийг энэ бүлэг бүхэлдээ бидэнд давтан сургалаа ("12" тоо шиг харагддаг string, "True" bool шиг харагддаг string, одоо <class 'int'> string шиг харагддаг төрөл).
type() бол ямар ч утга, илэрхийлэл, variable-ийн төрлийг Python-оос асуудаг багаж: print(type(...)) хэлбэрээр хэрэглэнэ.
Хариулт <class 'int'> маягтай гардаг — голын үгийг нь уншина; string-ийн албан ёсны нэр нь str.
Төрөл нь хайрцагных биш доторх утгынх — утга солигдоход төрөл нь хамт солигдож болно.
type() хариугаа өөрөө хэвлэдэггүй тул файл дотор print-тэй хамт хэрэглэнэ; давхар хаалтын тоогоо тоол.
Дадал: төрөлд эргэлзвэл таамаглалгүй — type()-ээр асуу.
Дараагийн хичээлд бид тооны ертөнц рүүгээ буцаж очиж, үйлдлүүдийн гэр бүлээ гүйцээнэ: танил + - / дөрвөө товч давтаад, шинэ гурван үйлдэлтэй танилцана — бүхэл хуваалт (//), үлдэгдэл (%), зэрэг (*). Ялангуяа % буюу үлдэгдлийн үйлдэл нь "юунд хэрэгтэй юм бэ" гэж эхлэгч бүрийг гайхшруулдаг мөртлөө программистын хамгийн дуртай багажуудын нэг байдаг — учрыг нь тэнд тайлна.
Бүртгэлтэй болсноор энэ сургалтын бүх хичээлд хандах эрх авна.