Labels

Saturday, February 6, 2010

Native Datatypes бүлэг доторхи үргэлжлэл...

Хувьсагч зарлах
Өмнөх постод Дүүдээгийн хэлсэнчлэн файтон хэлэнд хувьсагчдийг зарлахад өгөгдлийн төрөлийг нь тодорхойлж өгөх шаардлагагүй ингээд myParams гэдэг хувьсагчийг зарлаж байгаа нэг жишээ тавьчъя :)

if __name__ == "__main__":
     myParams = {"server","124.12.54.4",
                          "database":"KungfuMaster",
                          "uid":"sa",
                          "pwd","mashnuuts"
                          }

Хувьсагчийн утгаар сонин юутай байна вэ?
энэ Икс гэдэг нөхөр дотор ямар утга байнаа гэдгийг мэдэхийн тулд та script мөрөн дээр x гээд бичихэд л хангалттай.

>>> x
Traceback (innermost last):
    File "", line 1, in ?
NameError: There is no variable names 'x'
>>> x = 1
>>> x
1
эхлээд x гээд харах гэтэл урдаас алдаа шидэж байна :) учир нь x гэж нэрлэгдсэн хувьсагч байхгүй гэнээ. Үүний дараа x = 1 гэж x-д утга оноон хувьсагчийг зарлаж өглөө. Харин одоо хувьсагч зарлагдсан тул x -ийн утгыг скрипт мөрөнд хэвлэж харахад асуудалгүй. Зүгээр л хувьсагчийн нэрийг өгөөд дуудчихад болно.

Ганцхан удаад хандаад л утгуудыг өөрчлөх
Файтон хэлэнд олон утгуудыг өөрчлөхөд дарааллын дагуу ханддаг. Дараах жишээнээс хараарай.
>>> v = ('a', 'b', 'e')
>>> (x, y, z) = v
>>> x
'a'
>>> y
'b'
>>> z
'e'

сүүлийн хэсэгт x, y, z үүдийн утгуудыг хэвлэж харж байгааг та лав гадарлаж байгаа бизээ.
>>> range(7)
[0, 1, 2, 3, 4, 5, 6]
>>> (Davaa, Myagmar, Lhagva, Purev, Baasan, Byamba, Nyam) = range(7)
>>> Davaa
0
>>> Myagmar
1
>>> Nyam
6

За тэр хараа биддэ? range функц нь 0-ээс авах аргументийнхаа утга хүртэл тоо бүхий олонлог үүсгэдэг юм байна. Энэ үүсгэгдсэн утгуудын дарааллаар эдгээр гаригуудын нэрт утга оноож байгаан байна.

Мөр буюу дараалсан үсэгнүүд өөрөөр текст бүхий хувьсагч ч гэдэг үүнийг форматлах буюу хэвд оруулах нь
Си хэлэнд мөр хэвлэж харахад sprintf -д %s гэсэн юм ашигладагдаа яг тэрэн шиг хэрэглээтэй юм байна. За одоо тэгвэл илүү ойлгомжтой болгох үүднээс хоёр ширхэг мөрийг холбож байгаа жишээ харъя.

>>> ehniiMor = "Hi sain uu"
>>> daraagiinMor = "huuhdee"
>>> zalgasanMor = "%s=%s" % (ehniiMor, daraagiinMor)
>>> zalgasanMor
'Hi sain uu=huuhdee'
>>>

Энэ жишээнд %s-ийн дарааллын дагуу хувьсагчдыг сольж тавьж байна.
Дараагийн жишээг харъя

>>> text1 = "Dorj"
>>> text2 = "alim"
>>> print text1 + " guai " + text2 + "and durtain genelee taminee"
Dorj guai alimand durtain genelee taminee

За мөрнүүдийг залгаад ингэж нэг харуулж болж байна тэгвэл %s -ээ ашиглаад нэг хэвлье
>>> text1 = "Dorj"
>>> text2 = "alim"
>>> print "%s guai %sand durtain genelee taminee" % (text1,text2)
Dorj guai alimand durtain genelee taminee

Надад лав %s ашигласан нь хамаагүй дээр санагдаж байнаа.


>>> eneBolToo = 6
>>> print "a too utga=%s" % (eneBolToo)
Traceback (innermost last):
   File "", line 1, in ?
TypeError: cannot concatenate 'str' and 'int' objects




Oops алдаа өгч байна юу болчуу? %s -ээр тэмдэгт мөрийг хэвлэж харж болохоос биш тоон утгыг бол болдоггүй юм байна. Тоо хэвлэж хармаар вайшдээ >.< 
Тэгүүл яг л Си дээрхитэй ижилхэн бөгөөд %d гэж хэвлэж өгч болно.



Бутархай тоог хэвшүүлэхэд ч гэсэн яг л Сииии
>>> print "Onoodriin huvitsaanii hansh: %f" % 50.4625
50.462500
>>> print "Onoodriin huvitsaanii hansh: %.2f" % 50.4625
50.46
>>> print "Onoodriin huvitsaanii hansh: %+.2f" % 1.5
+1.50

hj
[бичигдэж байна :)]