Saturday, July 25, 2015

თავი 10 (10,3 - 10,4)

10.3 Tuple assignment

პითონის ენაში ერთ - ერთი უნიკალური სინტაქსური მახასიათებელია ტოლობის მარცხენა მხარეზე თუპლის ქონის უნარი. ეს საშუალებას იძლევა გავუტოლოთ ერთზე მეტი ცვლადი როცა მარცხენა მხარე არის თანრიგი. ამ მაგალითში გვაქვს ორ ელემენტიანი სია(რაც თანრიგია) და თანრიგის პირველ და მეორე ელემენტს ერთი ტოლობით ვუტოლებთ ცვლადებს   x - ს და y - ს.

>>> m = [ 'have', 'fun' ]
>>> x, y = m
>>> x
'have'
>>> y
'fun'
>>> 

ეს არაა ჯადოქრობა.  პითონი პირდაპირ თარგმნის თუპლის გატოლების სინტაქსს შემდეგნაირად:
(პითონი სინტაქსს არ თარგმნის სიტყვა-სიტყვით. მაგალითად თუ ცდი ლექსიკონებთან ნახავ, რომ არ იმუშავებს ისე, როგორც ელოდი.)

>>> m = [ 'have', 'fun' ]
>>> x = m[0]
>>> y = m[1]
>>> x
'have'
>>> y
'fun'
>>> 

როცა ტოლობის მარცხენა მხარეს ვიყენებთ თუპლს, ვტოვებთ ფრჩხილებს, მაგრამ
შემდეგი მაგალითი სინტაქსურად იგივეა.

>>> m = [ 'have', 'fun' ]
>>> (x, y) = m
>>> x
'have'
>>> y
'fun'
>>> 

ჭკვიანურად შედგენილი თუპლით შესაძლებელია ორი ცვლადის მნიშვნელობა შევცვალოთ ერთ გატოლებაში:

>>> a, b = b, a


ტოლობის ორივე მხარე არის თუპლი, მაგრამ მარცხენა მხარე არის ცვლადების თუპლი და მარჯვენა მხარე - გამოსახულების. მარჯვენა მხარის ყოველი მნიშვნელობა გატოლებულია მარცხენა მხარის შესაბამის ცვლადთან. მარჯვენა მხარის ყველა გამოსახულება შეფასებულია გატოლებამდე.

ტოლობის მარცხენა მხარეს ცვლადების რაოდენობა და ტოლობის მარჯვენა მხარეს მნიშვნელობების რაოდენობა უნდა იყოს ერთი და იგივე.

>>> a, b = 1, 2, 3
ValueError: too many values to unpack

უფრო ზოგადად, მარჯვენა მხარე შეიძლება იყოს ნებისმიერი ტიპის თანრიგი (სტრინგი, სია ან თუპლი). მაგალითად, მეილის მისამართის მომხმარებლის სახელად და დომაინად დასაყოფად შეგეძლო დაგეწერა:

>>> addr = 'monty@python.org'
>>> uname, domain = addr.split('@')

დაყოფის შემდეგ მნიშვნელობა იქნება ორელემენტიანი სია; პირველი ელემენტი გატოლებულია uname - თან და მეორე - domain.

>>> print uname
monty
>>> print domain
python.org


10.4 ლექსიკონები და თუპლები


ლექსიკონებს აქვს მეთოდი items რომელიც აბრუნებს თუპლების სიას, სადაც ყოველი თუპლი არის გასაღები-მნიშვნელობის წყვილი(გმწ).
(ეს ქცევა უმნიშვნელოდ განსხვავებულია პითონ 3.0 - ში)

>>> d = {'a':10, 'b':1, 'c':22}
>>> t = d.items()
>>> print t
[('a', 10), ('c', 22), ('b', 1)]

როგორც ელოდი ელემენტები არ არიან განსაკუთრებული რიგით.

მას შემდეგ რაც თუპლების სია არის სია და თუპლები არის შედარებადი, უკვე შეგვიძლია  თუპლების სიის დახარისხება. ლექსიკონის თუპლების სიად გარდაქმნა ჩვენთვის არის გზა გასაღების მიხედვით დახარისხებული ლექსიკონის შიგთავსის ამობეჭდვისა:

>>> d = {'a':10, 'b':1, 'c':22}
>>> t = d.items()
>>> t
[('a', 10), ('c', 22), ('b', 1)]
>>> t.sort()
>>> t
[('a', 10), ('b', 1), ('c', 22)]

ახალი სია დახარისხებულია ანბანის მიხედვით.