Other Built-in introspection tools

Python sizga kodni tushunishga yordam beradigan bir necha boshqa vositalarni taqdim etadi.

SU

Boshqa ichki introspeksiya vositalari

Python sizga kodni tushunishga yordam beradigan bir necha boshqa vositalarni taqdim etadi. Mana, bir nechta foydali ichki funksiyalar:

  • callable()
  • len()
  • locals()
  • globals()

Keling, ularni ko'rib chiqaylik va qanday ishlatishingiz mumkinligini bilib olaylik!

callable() dan foydalanish

callable() funksiyasi obyektning chaqirilishi mumkinligini tekshiradi. Bu nimani anglatadi? Chaqiriladigan obyekt - bu Python'da natija olish uchun chaqirishingiz mumkin bo'lgan narsa, masalan, funksiya yoki sinf.

Noaniq modul bilan ishlaganda, nima o'zgaruvchi, nima funksiya yoki nima sinf ekanligini har doim bilib bo'lmaydi. Oldingi help() funksiyasi sizga bu haqda ma'lumot beradi, lekin agar yordam rejimiga o'tmoqchi bo'lmasangiz, callable() dan foydalanish yaxshi variant bo'lishi mumkin.

Mana bir nechta misollar:

>>> a = 5
>>> callable(a)
False
>>> def adder(x, y):
...     pass
...
>>> callable(adder)
True
>>> class Ball:
...     pass
...
>>> callable(Ball)
True

Birinchi misolda, o'zgaruvchi chaqirilishi mumkin emasligini ko'rsatadi. Shunday qilib, a o'zgaruvchisi ehtimol o'zgaruvchi ekanligini ishonch bilan aytishingiz mumkin. Keyingi ikki misol adder funktsiyasini va Ball sinfini callable() bilan sinovdan o'tkazadi. Ikkalasi ham chaqirilishi mumkinligi sababli, True qaytaradi. Albatta, sinfni "chaqirganda", siz uni instansiyalashyapsiz, shuning uchun bu funktsiya kabi bir xil emas.

len() dan foydalanish

len() funksiyasi obyektning uzunligini topishda foydali. Siz, ehtimol, satr yoki ro'yxatning qancha uzunlikda ekanligini tekshirish uchun uni ko'p ishlatishingiz kerak bo'ladi.

Mana bir nechta misollar:

>>> len('abcd')
4
>>> len([1, 'two', 3])
3

Siz len() ni Python'da turli xil obyektlar ustida ishlatishingiz mumkin.

Biroq, ba'zi hollarda, bu raqamlar ustida ishlamaydi:

>>> a = 4
>>> len(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()

locals() dan foydalanish

locals() funksiyasi joriy mahalliy simbol jadvalining lug'atini qaytaradi. Bu sizga joriy kontekst yoki doirangizda nimalar mavjudligini aytadi.

Keling, bir misolga qaraylik. Terminalingizda python3 ni ishga tushiring. Keyin quyidagilarni bajarishingiz mumkin:

>>> locals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>}

Bu sizga nom bo'shlig'ingizda (doirangizda) nimalar mavjudligini ko'rsatadi. Biroq, bu juda foydali emas. Keling, bir nechta o'zgaruvchi yarataylik va bu buyruqni qayta ishga tushiraylik:

>>> a = 3
>>> b = 4
>>> locals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'a': 3, 'b': 4}

Endi siz yaratgan o'zgaruvchilar lug'atga kiritilganini ko'rasiz.

locals() ni funktsiya ichida ishlatish yanada foydaliroq:

>>> def adder(x, y):
...     print(locals())
...
>>> adder(4, 5)
{'x': 4, 'y': 5}

Bu sizga funktsiyaga qanday argumentlar o'tkazilganini va ularning qiymatlarini ko'rish imkonini beradi.

globals() dan foydalanish

globals() funksiyasi locals() funksiyasiga o'xshaydi; farqi shundaki, globals() har doim modul darajasidagi nom bo'shligini qaytaradi, locals() esa joriy nom bo'shligini qaytaradi. Haqiqatan ham, agar siz ularni modul darajasida (ya'ni, har qanday funktsiya yoki sinfdan tashqarida) chaqirsangiz, ularning qaytargan lug'atlari mos keladi.

Keling, adder() ichida globals() ni chaqirib ko'raylik:

>>> def adder(x, y):
...     print(globals())
...
>>> adder(4, 5)
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x10ef3db80>, '__spec__': None, '__builtins__': <module 'builtins' (built-in)>, 'adder': <function adder at 0x10ead00d0>}

Ko'rishingiz mumkinki, bu kodni ishga tushirganda, lug'atda modul darajasidagi atributlar, funktsiyalar va hokazo mavjud, lekin siz funktsiyaga berilgan argumentlar va ularning qiymatlarini ko'rmaysiz.

Ushbu sahifada

Xato haqida xabar berish