Positional-only parameters

Python 3.8 funksiyalarga yangi xususiyat qo'shdi, bu esa pozitsiya bo'yicha parametrlar deb ataladi.

SU

Pozitsiya bo'yicha parametrlar

Python 3.8 funksiyalarga yangi xususiyat qo'shdi, bu esa pozitsiya bo'yicha parametrlar deb ataladi. Ular Python'ga ba'zi parametrlar pozitsiya bo'yicha bo'lishi kerakligini va ba'zilari kalit so'z bo'lishi kerakligini aytish uchun maxsus sintaksisdan foydalanadi.

Keling, misolga qaraylik:

>>> def positional(name, age, /, a, b, *, key):
...     print(name, age, a, b, key)
...
>>> positional(name='Mike')
Traceback (most recent call last):
  Python Shell, prompt 21, line 1
builtins.TypeError: positional() got some positional-only arguments passed as keyword arguments: 'name'

Birinchi ikkita parametr, name va age, pozitsiya bo'yicha bo'lishi shart. Ular kalit so'z argumentlari sifatida uzatilishi mumkin emas, shuning uchun yuqoridagi xatoni ko'rasiz. a va b argumentlari esa pozitsiya yoki kalit so'z sifatida bo'lishi mumkin. Nihoyat, key faqat kalit so'z sifatida.

Oldinga slash, /, Python'ga oldidagi barcha argumentlar pozitsiya bo'yicha bo'lishi kerakligini bildiradi. Slashdan keyin esa pozitsiya yoki kalit so'z argumentlari keladi, va * belgisidan keyin esa hamma narsa faqat kalit so'z argumentlari sifatida ko'riladi.

Funktsiyani chaqirishning to'g'ri usuli:

>>> positional('Mike', 17, 2, b=3, key='test')
Mike 17 2 3 test

Biroq, agar siz faqat pozitsiya argumentlarini uzatsangiz, xato olasiz:

>>> positional('Mike', 17, 2, 3, 'test')
Traceback (most recent call last):
  Python Shell, prompt 25, line 1
builtins.TypeError: positional() takes 4 positional arguments but 5 were given

positional() funksiyasi oxirgi argumentni kalit so'z argumenti sifatida kutmoqda.

Asosiy g'oya shundaki, pozitsiya bo'yicha parametrlar parametr nomining o'zgarishiga imkon beradi, mijoz kodini buzmasdan.

Siz pozitsiya bo'yicha argumentlar va **kwargs uchun bir xil nomdan ham foydalanishingiz mumkin:

>>> def positional(name, age, /, **kwargs):
...     print(f'{name=}')
...     print(f'{age=}')
...     print(f'{kwargs=}')
...
>>> positional('Mike', 17, name='Mack')
name='Mike'
age=17
kwargs={'name': 'Mack'}

Sintaksisning to'liq amalga oshirilishi va sabablarini bu yerda o'qishingiz mumkin: PEP 570.

Keling, keyingi mavzuga o'tamiz va doiralar haqida bir oz o'rganamiz!

Ushbu sahifada

Xato haqida xabar berish