Labels

Friday, January 15, 2010

Өгөгдлийн Төрөл

Зиа нилээд хэд хоног дэмий явж, явж саяхан л Python-ийнхоо номыг барьж авлаа. Өмнө бид ерөнхийдөө Python хэлтэй танилцчихсан байгаа ба анхны скриптээ ажиллуулж үзсэн. Ер нь ямар ч хэл дээр ажиллаж байх үед хамгийн анхаарвал зохилтой зүйл бол тухайн хэлний өгөгдлийн төрөл, тэдний онцлог, шинж чанар, давуу сул талууд болон тэдэнтэй ажиллах функцуудыг маш сайн мэдэж авсан байх шаардлагатай байдаг. Тэгэхээр уншиж байгаа номынхоо 3 дугаар бүлэг буюу "Native Datatypes" гэсэн бүлэгт оржээ...

Python хэлэнд үндсэн 3 өгөгдлийн төрөл байдаг ба тэдгээр нь Dictionary, List, Tuple юм. List буюу жагсаалтын талаар ихэнхи нь ойлголттой байгаа байх. Харин Perl мэддэг хүмүүс бол Dictionary-г ч мөн адил гадарлаж байгаа ба Python-д бусад хэлүүдэд бараг тохиолддоггүй Tuple хэмээх өгөгдлийн төрөл байх юм. Tuple нь жагсаалт буюу List-тэй адил боловч гол онцлог нь түүнийг хувирашгүй жагсаалт гэнэ. Тэгэхээр номоо уншихаасаа өмнө таамаглах гэж оролдъё :P
    Жагсаалтын хувьд анх үүсгэсэн жагсаалтынхаа өгөгдлүүдийг устгах, нэмэх, хасах, байрлалыг нь өөрчлөх, өгөгдөл буюу элэмент хайх гэх мэт үйлдлүүдийг хийж болдог бол энэ Tuple-ийн хувьд хувьсагч зарлах үедээ авах утгуудыг оноох ба программын ажиллагааны үед түүнд ямар нэг засвар, өөрчлөлт хийх боломжгүй гэсэн төсөөлөл бууж байна.
Харин одоо номноосоо баталгаажуулъя... :D
   - A tuple is defined in the same way as a list, except that the whole set of elements is enclosed in parentheses instead of square brackets.
   - The elements of a tuple have a defined order, just like a list. Tuples indices are zero−based, just like a list, so the first element of a non−empty tuple is always t[0].
   - Negative indices count from the end of the tuple, just as with a list.
   - Slicing works too, just like a list. Note that when you slice a list, you get a new list; when you slice a tuple, you get a new tuple.

Tuples have no methods!
>>> t
('a', 'b', 'mpilgrim', 'z', 'example')
>>> t.append("new")
Traceback (innermost last):
  File "", line 1, in ?
AttributeError: 'tuple' object has no attribute 'append'

1. Tuple-д элэмент нэмж болдоггүй. Tuple нь append, extend гэсэн методгүй.
>>> t.remove("z")
Traceback (innermost last):
  File "", line 1, in ?
AttributeError: 'tuple' object has no attribute 'remove'

2. Tuple-ээс элэмент хасаж болдоггүй. Tuple нь remove, pop гэсэн методгүй.
>>> t.index("example")
Traceback (innermost last):
  File "", line 1, in ?
AttributeError: 'tuple' object has no attribute 'index'

3. Tuple-ээс элэмент хайж болдоггүй. Tuple нь index гэсэн методгүй.(Намайг турших үед index метод байж л байналээшд :P Гэхдээ дүрмэндээ заасан учир цаашид байдаггүй гэж ойлгох нь зүйтэй болов уу.)
>>> "z" in t
True

4. Шаардлагатай элэмент Tuple-д агуулагдаж байгаа эсэхийг in гэсэн түлхүүрээр шалгаж болно.
Дээрээс харахад Tuple-ийн оронд жагсаалт хэрэглэх нь илүү санагдаж байна л даа. Харин Tuple-ийн давуу талууд бас байна аа...
- Tuples are faster than lists
- It makes your code safer if you "write−protect" data that does not need to be changed
- Remember that I said that dictionary keys can be integers, strings, and "a few other types"? Tuples are one of
those types
- Tuples are used in string formatting, as you'll see shortly


Зиа өндөөрөтөө ингээд болъё. Ямартай ч нэг шинэ төрлийн өгөгдлийн төрлийн талаар мэдэж авлаа... Нээрэн Python нь хувьсагч зарлах үед түүний төрлийг тодорхойлох шаардлагагүй байдаг ба мөнөөх гурван төрлөөр хувьсагч зарлахдаа:
>>> d = {"server":"mpilgrim", "database":"master"} // Dictionary
>>> li = ["a", "b", "mpilgrim", "z", "example"] // List
>>> t = ("a", "b", "mpilgrim", "z", "example") // Tuple
гэж зарладаг юм билээ...
dictionary - зарлах үед хувьсагчийн блок нь "{", "}" буюу гоё хаалтан дотор бичигддэг
list - зарлах үед "[", "]" буюу энгийн хаалтанд бичиггддэг
tuple - зарлахад "(", ")" буюу бөөрөнхий хаалтан дотор утга буюу элэментүүдийг бичин зарладаг.

За үүгээр өнөөдрийн бичлэгийг дуусгавар болгъё...

1 comment:

Гүнчин-Ишийн Шаравсамбуу said...

Ерөнхийдөө маш их ойлгомжтой байлаа :)