The Walrus Operator and Positional-only Arguments

Kategori: Python , 05 Ocak 2020 , JanFranco


Bu yazımda Python 3.8 sürümü ile birlikte gelen özelliklerin ikisinden bahsedeceğim: walrus operator ve positional only arguments.

Walrus operatörü (:=) ile değişkenleri tek satırda set edip return edebiliyoruz. Bir örnek yapalım:


sample_data = [
{"id": 1, "name": "Srijan"},
{"id": 2, "name": "Abhishek"},
{"id": 3, "name": "Dilip"},
{"id": 4, "name": "Vishal"},
{"id": 4, "name": None},
]

for entry in sample_data:
    name = entry.get("name")
    if name:
        print(f'Found name = {name}')
Sözlükler tutan sample_data adında bir liste tanımladık. Bir for döngüsü ile bu sözlüklerde gezindik. Her adımda name anahtarına denk gelen değeri bastıracağız fakat ismin none olup olmamasını kontrol ediyoruz. Bunun için ilk önce name değişkeninde değeri saklıyoruz ve bu name değişkenini kontrol ediyoruz. Şimdi bunu walrus operatörü ile yapalım:


for entry in sample_data:
    if name := entry.get("name"):
        print(f'Found name = {name}')
Bu kez aynı işlemi tek satırda walrus operatörü ile yapmış olduk. Bir diğer yeni gelen özellik positional-only argüman. Python'da bir fonksiyonun parametrelerini tanımlarken bu parametrelere default değerler atamak için (x=None, y=2) tarzı tanımlamalar yapabiliyorduk. Fonksiyonu çağırırken tanımladığımız anahtarları kullanabiliyorduk, sırası karışık bir şekilde de argüman gönderebiliyorduk. Eğer argümanların sadece sırayla gönderilmesini istiyorsak '/' karakterini kullanabiliriz:


def func(x, y, z=None, /):
    sum = x + y
    if z is not None:
        sum -= z
        return sum


print(func(2, 5)) #7
print(func(2, 5, 3)) #4
print(func(x=2, y=10)) #TypeError
print(func(2, 10, z=3)) #TypeError
Görüldüğü gibi fonksiyonda dördüncü bir parametre olarak '/' karakterini tanımladığımız için artık keyword ile fonksiyonu kullanamıyoruz.


Yorumlar

Henüz bir yorum bulunmuyor.