Using Assignment Expressions

Python assignment expression

SU

Vazifa Ifodalari (Assignment Expressions)dan Foydalanish

Vazifa ifodalari hali ham nisbatan kamdan-kam uchraydi. Ammo, siz vazifa ifodalarini bilishingiz kerak, chunki ular bilan vaqt-vaqti bilan duch kelishingiz mumkin. PEP 572 da vazifa ifodalari bo'yicha yaxshi misollar mavjud.

1 # Moslashtirilgan regexni qayta ishlash
2 if (match := pattern.search(data)) is not None:
3...
4
5 # iter() chaqiruvining 2-argumentli shakliga nisbatan yanada aniqroq alternativ
6 while (value := read_next_item()) is not None:
7...
8
10 9 # Ta'riflash filtri va uning natijasini qaytaruvchi subifodani birga ulash
filtered_data = [y for x in data if (y := f(x)) is not None]

Ushbu 3 misolda, ifoda bayonotida o'zgaruvchini yaratmoqdasiz. Birinchi misol regex pattern search natijasini o'zgaruvchi matchga tayinlaydi. Ikkinchi misolda, o'zgaruvchi value funksiya chaqiruvi natijasiga tayinlanadi, while siklida ifoda ichida. Nihoyat, uchinchi misolda, f(x) chaqiruvining natijasi y o'zgaruvchisiga tayinlanadi ro'yxatni tushirishda.

Vazifa ifodalari ishlatilgan va ishlatilmagan kodlar orasidagi farqni ko'rish foydali bo'lishi mumkin. Mana, faylni bo'laklarga o'qishning bir misoli:

1 with open(some_file) as file_obj:
2 while True:
3 chunk_size = 1024
4 data = file_obj.read(chunk_size)
5 if not data:
6 break
7 if 'something' in data:
8 # ma'lumotlarni qayta ishlash

Ushbu kod, hajmi noma'lum bo'lgan faylni ochadi va uni har 1024 baytdan qayta ishlaydi. Bu, juda katta fayllar bilan ishlashda foydalidir, chunki bu faylni butunlay xotiraga yuklashdan saqlaydi. Agar buni qilsangiz, xotira tugashi va ilovangiz yoki hatto kompyuteringiz ishdan chiqishi mumkin.

Endi bu kodni vazifa ifodasi yordamida qisqartirish mumkin:

1 with open(some_file) as file_obj:
2 chunk_size = 1024
3 while data := file_obj.read(chunk_size):
4 if 'something' in data:
5 # ma'lumotlarni qayta ishlash

Bu yerda, read() natijasini while siklida data o'zgaruvchisiga tayinlaysiz. Bu sizga o'zgaruvchidan foydalanish imkoniyatini beradi va ba'zi ma'lumotlar qaytarilganini tekshiradi, shuning uchun if not data: break qismiga ehtiyoj qolmaydi.

PEP 572da keltirilgan yana bir yaxshi misol, Pythonning o'z site.py faylidan olingan. Mana, dastlabki kod qanday edi:

1 env_base = os.environ.get("PYTHONUSERBASE")
2 if env_base:
3 return env_base, None)

Endi, bu vazifa ifodasi yordamida qanday qisqartirilgan bo'lishi mumkin:

1 if env_base := os.environ.get("PYTHONUSERBASE"):
2 return env_base, None)

Siz tayinlashni shartli bayonotning ifodasiga ko'chirasiz, bu esa kodni sezilarli darajada qisqartiradi.

Endi vazifa ifodalari ishlatilmaydigan ba'zi holatlarni ko'rib chiqaylik.

Last updated on

On this page

Xato haqida xabar berish