Python, oldukça güçlü bir programlama dilidir. Bu yazımda, Python’un fonksiyonlarındaki parametreleri nasıl kullanacağınızı anlatacağım. Özellikle, kwargs (anahtar kelime argümanları) ve bu konudaki bazı püf noktalarına değineceğim.
Python’da argümanlar, sabit değerler veya değişken isimleri olarak fonksiyonlara geçilebilir. Anahtar kelime argümanları (kwargs), bir fonksiyona anahtar kelime-değer çiftleri olarak argümanlar geçişine olanak tanır.
Kwargs sayesinde, fonksiyon çağrısında hangi anahtar kelime-değer çiftlerinin kullanıldığını belirtmek gerekmeksizin bir veya daha fazla anahtar kelime argümanı geçebilirsiniz. Bu da okunabilirliği artırır ve gereksiz kod tekrarını azaltır.
Kwargs Nedir?
Kwargs, fonksiyonlara anahtar kelime-değer çiftleri olarak argümanlar geçmeye olanak tanır. Örneğin, fonksiyonlara age=20
gibi key-value çifti olarak argümanlar geçebiliriz.
Peki kwargs neden bu kadar önemlidir? Çünkü kwargs ile:
- Argümanları ismen belirtmek gerekmeksizin geçebiliriz, bu da okunabilirliği artırır.
- Varsayılan değerler atayarak fonksiyonları daha esnek hale getirebiliriz.
- Aynı isimde birden fazla argümanı kolayca geçebiliriz.
- İleri seviye fonksiyonlar yazabiliriz; yani, yalnızca keyword argümanı alabilen fonksiyonlar yazabiliriz.
- Bir nesnenin tüm özelliklerini geçirmek için nesne örneğini de geçebiliriz.
- Bir sınıfın tüm özelliklerini geçirmek için sınıf örneğini de geçebiliriz.
Kwargs, aslında *args
ile birlikte kullanılan özel bir parametre türüdür. Bu nedenle, kwargs kullanabilmemiz için öncelikle args’ı anlamamız gerekir.
Args Nedir?
Args, aslında bir kısayoldur ve uzun hali arguments‘tır. Yani, args, fonksiyonlara geçilen tüm pozisyonel argümanları temsil eder.
Pozisyonel argümanlar, belirtilen sıraya göre geçirilen argümanlardır. Örneğin:
def func(arg1, arg2):
print(arg1)
print(arg2)
func('Hello', 'World') # 'Hello' arg1'e, 'World' arg2'ye atanır
Burada 'Hello'
, arg1
için ve 'World'
, arg2
için pozisyonel argümandır. Bu yüzden kwargs gibi args’lar da önemlidir çünkü args kullanarak fonksiyonlara geçilen pozisyonel argümanları temsil edebiliriz.
Kwargs Kullanımı ve Örnekler
Şimdi de kwargs’ı birkaç örnek ile daha iyi anlayalım.
Kwargs Kullanımı ve Örnek 1: Anahtar Kelime Argümanları Geçmek
def func(arg1, arg2):
print(arg1)
print(arg2)
func(arg1='Hello', arg2='World') # Anahtar kelime argümanları geçirildi
Kwargs Kullanımı ve Örnek 2: Varsayılan Değerler Atamak
def func(arg1='Hello', arg2='World'):
print(arg1)
print(arg2)
func() # Varsayılan değerler yazdırılır
Kwargs Kullanımı ve Örnek 3: Aynı İsimde Birden Fazla Argüman Geçmek
def func(arg1='Hello', arg1='World'):
print(arg1)
print(arg2)
func() # 'World' yazdırılır
Aynı isimde birden fazla argüman geçtiğimizde, son tanımlanan argümanın değeri kullanılır.
Kwargs Kullanımı ve Örnek 4: İleri Seviye Fonksiyonlar Yazmak
def func(arg1, *, arg2):
print(arg1)
print(arg2)
func('Hello', 'World') # TypeError: func() takes 1 positional argument but 2 positional arguments were given
Yukarıdaki örnekte, *
‘dan sonra gelen argümanlar yalnızca anahtar kelime argümanı olarak geçirilebilir. Yani, bu tür argümanlara pozisyonel olarak değer geçemezsiniz.
Kwargs Kullanımı ve Örnek 5: Nesnenin Tüm Özelliklerini Geçmek
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person('Alice', 20)
def func(**kwargs):
print(kwargs)
func(name=person.name, age=person.age) # {'name': 'Alice', 'age': 20}
Kwargs sayesinde nesnenin tüm özelliklerini geçebilirsiniz.
Kwargs Kullanımı ve Örnek 6: Sınıfın Tüm Özelliklerini Geçmek
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
person = Person('Alice', 20)
def func(**kwargs):
print(kwargs)
func(name=person.name, age=person.age) # {'name': 'Alice', 'age': 20}
Aynı şekilde kwargs sayesinde sınıfın tüm özelliklerini de geçebilirsiniz.
Kwargs Kullanımı ve Örnek 7: Birden Fazla Değeri Geçmek
def func(**kwargs):
for key, value in kwargs.items():
print(key, value)
func(name='Alice', age=20) # 'name Alice' ve 'age 20' yazdırır
Bu örnekte kwargs ile birden fazla anahtar kelime-argüman çifti geçiriyoruz.
Kwargs Kullanımı ve Örnek 8: Default Parametreyi Geçmek
def func(name, age=20):
print(name)
print(age)
func(age=30, name='Alice') # Anahtar kelime argümanları sayesinde sıraya dikkat edilmez
Kwargs Kullanımı ve Örnek 9: Pozisyonel Argüman ile Default Değer Geçmek
def func(name='Alice', age=20):
print(name)
print(age)
func('Bob', age=30) # Anahtar kelime argümanı sayesinde default değeri değiştirdik
Anahtar kelime argümanı sayesinde varsayılan değeri değiştirebildik.
Kwargs ile İlgili Dikkat Edilmesi Gerekenler ve Sık Yapılan Hatalar
Kwargs kullanımında dikkat etmeniz gereken birkaç nokta var:
- Aynı isimdeki pozisyonel ve anahtar kelime argümanlarını karıştırmamalısınız. Eğer aynı isimde hem pozisyonel hem de anahtar kelime argümanı varsa Python hata verir.
- Anahtar kelime argümanı olarak geçilen değerlerin sıralaması önemli değildir. Ancak pozisyonel olarak geçen değerlerin sıralaması önemlidir.
Kwargs’ın Gücü: Nasıl Çalıştığını Anlama ve Yanlış Kullanım Örnekleri
Kwargs’ın gücünü anlamak için aşağıdaki örneği inceleyelim:
def func(**kwargs):
for key, value in kwargs.items():
print(key, value)
funk(name='Alice', age=20) # Anahtar kelime-argüman çiftleri yazdırılır
Kwargs parametresi kullanarak belirtilen tüm anahtar kelime-argüman çiftlerini kwargs
nesnesine atıyoruz. Bu sayede tüm özelliklere kwargs['isim']
, kwargs['yaş']
, vb. şeklinde erişebiliyoruz.
Peki ya kwargs parametresini unutursak ne olur? Python hata vermez ama *args
‘ın değerini kwargs
‘a atar ki bu da genellikle beklenmeyen sonuçlar doğurur. Bu yüzden *kwargs
ve *args
‘ı dikkatli kullanmalısınız. Özellikle aynı isimde hem pozisyonel hem de anahtar kelime argümanı varsa Python hata verir.
Ayrıca, Python’daki tüm değerlerin aslında referans olduğunu unutmayın. Yani, bir nesneyi bir değişkene atadığınızda aslında o nesnenin referansını atıyorsunuzdur. Bu yüzden, bir değişkenin değerini değiştirdiğinizde aslında o nesnenin değerini değiştirmiş oluyorsunuzdur.
Kwargs ile Yaratıcılığınızı Konuşturun: Pratik Projeler ve Uygulamalar
Kwargs ile aşağıdaki projeleri geliştirebilirsiniz:
- Kullanıcı girişi yapan bir uygulama (e-posta ve şifre)
- Dijital bir ajanda (tarih, saat, etkinlik adı gibi bilgileri saklayan)
- Dijital bir takvim (tarih, etkinlik adı gibi bilgileri saklayan)
Kwargs sayesinde bu projelerin kodlarını daha okunabilir hale getirebilir ve tekrarı azaltabilirsiniz.
Sık Sorulan Sorular (SSS)
- Kwargs nedir?
wargs (kısa hali), Python’daki anahtar kelime-argüman çiftlerini temsil eder. Bu sayede fonksiyonlara belirtilen sıraya göre değil de isimlerine göre değer geçebiliriz.Kwargs nasıl çalışır?
wargs, Python’un sözlük özelliği sayesinde çalışır. Bir sözlük gibi key-value çifti olarak verilen değerler, fonksiyon içindeki kwargs nesnesine atanır.
bir_dict = {‘isim’: ‘Ali’, ‘yaş’: 30}
bir_dict[‘isim’] -> Ali
bir_dict[‘yaş’] -> 30
bir_dict.get(‘yaş’) -> 30
bir_dict.items() -> dict_items([(‘isim’, ‘Ali’), (‘yaş’, 30)])
bir_dict.keys() -> dict_keys([‘isim’, ‘yaş’])
bir_dict.values() -> dict_values([‘Ali’, 30])
etc…
liste = [‘Ali’, ‘Veli’, ‘Ayşe’]
liste[0] -> Ali
liste[1] -> Veli
liste[2] -> Ayşe
etc… - Kwargs ile kullanılan diğer özel parametre türleri nelerdir?
wargs ile birlikte kullanılan diğer özel parametre türleri şunlardır: - * (tek yıldız)
- *args (pozisyonel argümanlar)
- *defaults (varsayılan değerler)
- *var (genişletilmiş pozisyonel argümanlar)
- *varkw (genişletilmiş anahtar kelime-argüman çiftleri)