1. Python tili imkoniyatlari Pythonni ko`chirish


Qanday qilib bir funksiyadan boshqasiga opsional va nomlangan parametrlarni uzatish mumkin?



Yüklə 2,19 Mb.
səhifə73/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 bir funksiyadan boshqasiga opsional va nomlangan parametrlarni uzatish mumkin?


Bunday parametrlarni funksiya argumentlari ro`yxatida * va ** spetsifikatorlari yordamida hosil qilish mumkin; ular pozitsiyali argumentlardan iborat kortejni hamda nomlangan parametrlardan iborat lug`atlarni qaytarishadi. Bundan keyin siz ularni unga bo`lgan murojaatda * va ** lardan foydalangan holda boshqa funksiyaga uzatishingiz mumkin bo`ladi:

def f(x, *args, **kwargs):
...
kwargs['width'] = '14.3c'
...
g(x, *args, **kwargs)


Nima uchun “y” ro`yxatning ozgartirilishi “x” ro`yxatning ham o`zgarishiga olib keladi?



>>> x = []
>>> y = x
>>> y.append(10)
>>> y
[10]
>>> x
[10]

Agar siz quyidagi kodni yozsangiz:


siz y ga nimaningdir qo`shilishi x ning ham o`zgarishiga olib kelishini ko`rib hayron qolsangiz kerak.
Bunday natijaga kelishimizning 2 ta asosiy sababi bor:

  • O`zgaruvchilar – bu shunchaki ob`yektlarga bo`lgan havolalardir. Y = x ro`yxatning nusxasini yaratmaydi, bu buyruq shunchaki, yana bir xuddi o`sha ob`yektga yo`naltirilgan havolaga ega bo`lgan x o`zgaruvchini yaratadi.

  • Ro`yxatlar o`zgaruvchandirlar.

Append ni chaqirilgandan keyin, ob`yektning tarkibi [] dan [10] ga o`zgardi. X va y aynan bir ob`yektga havolaga ega bo`lganligi sababli, ulardan har qaysisining qo`llanilishi bizga 10 ni qaytaradi.
Agar biz o`zgarmaydigan ob`yektlarni qo`llaydigan bo`lsak:

>>> x = 5 # sonlar o`zgarmas ob`yektlardir
>>> y = x
>>> x = x + 1 # 5 ni o`zgartirish mumkin emas. Biz yangi bir ob`yekt yaratamiz.
>>> x
6
>>> y
5

Bu yerda biz x va y endi o`zaro teng emasliklarini ko`rishimiz mumkin, chunki, sonlar o`zgarmasdirlar hamda x = x + 1 5 sonini o`shirish bilan o`zgartirmaydi. Buning o`rniga yangi 6 ob`yektni yaratiladi va x o`zgaruvchiga o`zlashtiriladi(ya`ni x ning yo`naltirilgan ob`yekti havolasi o`zgartiriladi). Shundan keyin bizda 2 ta (5 va 6) ob`yektlari hamda ularga havola sifatida 2 ta (x va y) o`zgaruvchilar hosil bo`ladi.


Ba`zi operatsiyalar (masalan, y.append(10) va y.sort() kabilar) ob`yektni o`zgartirishadi, va shu bilan birga, ularga tashqi jihatdan o`xshash bo`lib ko`ringan operatsiyalar (masalan, y = y + [10] va sorted(y) kabi) yangi ob`yekt yaratishadi. Umuman Pythonda (va standart kutubxonaning barcha holatlarida ham) ob`yektni o`zgartiradigan metodlar xatoliklardan xoli bo`lish uchun None ni qaytarishadi. Shuninguchun agar siz quyidagicha yozgan bo`lsangiz:

y = y.sort()

Va bu sizga y ning tartiblashtirilgan nusxasini qaytaradi deb o`ylayotgan bo`lsangiz, siz buning o`rniga None ga ega bo`lasiz, bu esa oson tahlil qilish mumkin bo`lgan xatolikka olib keladi.


Lekin, yana bir operatsiyalarning klassi mavjudki, unda, aynan bir operatsiya turli xil tiplar bilan turlicha ishlaydi. U ham bo`sa, o`zlashtirishning kengaytirilgan operatsiyalaridir. Masalan, += ro`yxatlarni o`zgartiradi, lekin, kortejlar yoki sonlarni emas. (a_list += [1, 2, 3]) hamda a_list.extend([1, 2, 3]) lar o`zaro ekvivalent) ro`yxatni o`zgartiradi. some_tuple += (1, 2, 3) va some_int += 1 lar esa yangi ob`yekt yaratishadi.
Agar siz ikkita o`zgaruvchi aynan bitta ob`yektga havolaga ega yoki yo`qligini bilmoqchi bo`lsangiz, is operatori yoki id tarkibiy funksiyasidan foydalanishingiz mumkin.



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ə