1. Python tili imkoniyatlari Pythonni ko`chirish


Qanday qilib satr oxiridagi yangi satr belgilarini o`chirish mumkin?



Yüklə 2,19 Mb.
səhifə77/78
tarix19.12.2023
ölçüsü2,19 Mb.
#152124
1   ...   70   71   72   73   74   75   76   77   78
1. Python tili imkoniyatlari Pythonni ko`chirish

Qanday qilib satr oxiridagi yangi satr belgilarini o`chirish mumkin?



>>> lines = ("line 1 \r\n"
... "\r\n"
... "\r\n")
>>> lines.rstrip("\r\n")
'line 1 '

Yakuniy bo`sh joylarni o`chirmagan holda, yangi satr belgilarini o`chirish uchun S.rstrip(“\r\n”) dan foydalanish mumkin:




Qanday qilib, ro`yxatdagi takrorlanuvchi elementlarni o`chirish mumkin?


Bir mechta usullari mavjud: http://code.activestate.com/recipes/52560/

Qanday qilib ko`p o`lchovli ro`yxat yaratish mumkin?



>>> A = [[None] * 2] * 3

Siz mana bu natija bermaydigan variantni sinab ko`rgandirsiz:





>>> A
[[None, None], [None, None], [None, None]]

Bu quyidagicha chiqarish holatida to`g`ri bo`lishi mumkin:



>>> A[0][0] = 5
>>> A
[[5, None], [5, None], [5, None]]

Lekin siz biror qiymatni o`zlashtirsangiz, u bir nechta turli joylarda hosil bo`ladi:


Buning sababi shundaki, * operatori nusxalarni emas, faqatgina mavjud ob`yektlarga havolalarni yaratadi. *3 ayni bitta ro`yxatga 3 ta havolarni yaratadi. Bu satrlardan bittasining o`zgartirilishi boshqalarining ham o`zgarishiga olib keladi. Bu esa biz istagan vaziyat emas.



A = [None] * 3
for i in range(3):
A[i] = [None] * 2


Yechimlari:



w, h = 2, 3
A = [[None] * w for i in range(h)]

Yoki matritsalardan foydalanish imkoniyatini beriuvchi maxsus modullardan foydalanish mumkin. Ulardan eng ommaviysi – NumPydir.


Nega a_tuple[i] += [‘item’] ishlamaydi, qo`shish esa ishlayapti?


Buning sababi shuki, kangaytirilgan o`zlashtirish operatori – o`zlashtirish operatoridir, va shu bilan birga Pythondagi o`zgaruvchi va o`zgarmas ob`yektlar orasidagi farq sababli.
Umuman bu muhokamamiz o`zlashtirishning kengaytirilgan operatorlari o`zgaruvchi ob`yektlar bilan ishlayotgan kortej elementlariga nisbatan qo`llanilishiga haqida bo`lib, lekin shunday bo`lsada, biz misol tariqasida ro`yxatlar va += dan foydalanamiz.
Agar siz quyidagi misoldagi kabi yozsangiz xatolikka ega bo`lasiz:

>>> a_tuple = (1, 2)
>>> a_tuple[0] += 1
Traceback (most recent call last):
...
TypeError: 'tuple' object does not support item assignment

Noodatiy holatning sababi tushunarli bo`lsa kerak, 1 a_tuple[0] ob`yektga qo`shiladi, lekin biz kortejning birinchi elementiga 2 qiymatni o`zlashtirishga harakat qilganimizda, biz xatoga duch kelamiz, chunki biz kortej elementini o`zgartira olmaymiz.



>>> result = a_tuple[0] + 1
>>> a_tuple[0] = result
Traceback (most recent call last):
...
TypeError: 'tuple' object does not support item assignment

Ya`ni ushbu ifoda quyidagi amalni bajaradi:


Biz quyidagi misoldagilarni yozganimizda:



>>> a_tuple = (['foo'], 'bar')
>>> a_tuple[0] += ['item']
Traceback (most recent call last):
...
TypeError: 'tuple' object does not support item assignment

Biz kutmagan noodatiy holat yuzaga kelgan bo`lsa ham, undan ham qiziqarlisi shundaki, element qo`shildi!



>>> a_tuple[0]
['foo', 'item']

Nima hodisa ro`y berganligini tushunish uchun quyidagilarni bilish kerak:



  • Agar ob`yektni __iadd__ metodi aniqlaydigan bo`lsa, u += bajarilganda chaqiriladi va qaytariladigan qiymat o`zlashtirish uchun ishlatiladi.

  • Ro`yxatlar uchun __iadd__ ro`yxatlar uchun extendni chaqirilgani bilan teng kuchlidir.


>>> a_list = []
>>> a_list += [1]
>>> a_list
[1]

Shunday qilib,



>>> result = a_list.__iadd__([1])
>>> a_list = result

Ekvivalent:



>>> result = a_list.__iadd__([1])
>>> a_list = result >>> result = a_tuple[0].__iadd__(['item'])
>>> a_tuple[0] = result
Traceback (most recent call last):
...
TypeError: 'tuple' object does not support item assignment

Shunday qilib, bizning kortejli misolimiz quyidagiga ekvivalentdir:


__iadd__ samarali yakunlandi va ro`yxat kattalashdi, lekin, o`zlashtirish xatolik bilan yakunlandi.
34-bob

Yüklə 2,19 Mb.

Dostları ilə paylaş:
1   ...   70   71   72   73   74   75   76   77   78




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©genderi.org 2024
rəhbərliyinə müraciət

    Ana səhifə