**kwarg Kullanımı
Coddy'nin Python Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 43 / 64.
**kwargs, "anahtar kelime bağımsız değişkenleri" ifadesinin kısaltmasıdır. Bir işlevin, tümünü önceden tanımlamak zorunda kalmadan herhangi bir sayıda adlandırılmış bağımsız değişkeni (key=value çiftleri gibi) kabul etmesini sağlar.
Nasıl çalışır:
*args→ fazladan konumsal bağımsız değişkenleri bir demet içinde toplar**kwargs→ fazladan anahtar sözcük bağımsız değişkenlerini bir sözlükte toplar
Basit Örnek
Olası en basit örnekle başlayalım:
def greet(**kwargs):
print(kwargs)
greet(name="Alice", age=25, country="Australia")Çıktı:
{'name': 'Alice', 'age': 25, 'country': 'Australia'}Gördüğün gibi, **kwargs tüm anahtar kelime bağımsız değişkenlerini otomatik olarak bir sözlükte toplar.
Sözlüğü Kullanma
kwargs zaten bir sözlük olduğundan, doğrudan üzerinde döngü oluşturabilirsiniz:
def print_info(**kwargs):
print("Information received:")
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Bob", age=30, job="Teacher")Çıktı:
Information received:
name: Bob
age: 30
job: TeacherNormal Parametreleri **kwargs ile Birleştirme
Normal parametreleri **kwargs ile birleştirebilirsiniz:
def create_profile(name, **details):
print(f"Creating profile for: {name}")
print("Additional details:")
for key, value in details.items():
print(f" {key}: {value}")
create_profile("Sarah", age=28, city="London", hobby="Reading")Output:
Creating profile for: Sarah
Additional details:
age: 28
city: London
hobby: ReadingBoş **kwargs
Anahtar sözcük bağımsız değişkenleri geçirilmezse kwargs boş bir sözlük olur:
def show_data(**kwargs):
if kwargs:
print("Data:", kwargs)
else:
print("No data provided")
show_data() # Argüman yok
show_data(item="apple") # ArgümanlarlaÇıktı:
No data provided
Data: {'item': 'apple'}Gerçek Dünya Örneği: **kwargs ile Sınıf
**kwargs öğesini bir sınıfta şu şekilde kullanabilirsin:
class Person:
def __init__(self, name, **kwargs):
self.name = name
self.details = kwargs
def show_info(self):
print(f"Name: {self.name}")
for key, value in self.details.items():
print(f"{key}: {value}")
person = Person("Alice", age=25, city="New York", job="Engineer")
person.show_info()Çıktı:
Name: Alice
age: 25
city: New York
job: EngineerSözlüklerin Açılması
Fonksiyonları çağırırken sözlükleri de açabilirsiniz:
def display_settings(**kwargs):
for setting, value in kwargs.items():
print(f"{setting} = {value}")
settings = {"debug": True, "verbose": False, "timeout": 30}
display_settings(**settings) # Sözlüğü açarÇıktı:
debug = True
verbose = False
timeout = 30Temel Noktalar:
**kwargs, anahtar kelime bağımsız değişkenlerini bir sözlükte toplar: dönüştürmeye gerek yoktur, zaten bir sözlüktürkwargsadı gelenekseldir;**işaretinden sonra herhangi bir ad kullanabilirsiniz- Esnek işlev imzaları istediğinizde kullanın
- İsteğe bağlı parametreleri veya yapılandırma ayarlarını yönetmek için harikadır
Görev
KolayBu görevde, kapsamlı test kapsamına sahip bir kişi oluşturma sistemi uygulayacaksın.
Yalnızca person_creator.py dosyasını, uygulamana rehberlik eden TODO yorumlarını izleyerek düzenlemen gerekiyor. Dosya, çeşitli özelliklere sahip kişi nesneleri oluşturmak ve yönetmek için bir sınıf yapısı içeriyor.
Kendin dene
from person_creator import create_person
# Kapsamlı test durumu işleyicisi
test_case = input()
if test_case == "basic_test":
create_person(name="John", age=25, occupation="Engineer")
# Çıktı:
# Person created with properties:
# name: John
# age: 25
# occupation: Engineer
elif test_case == "empty_test":
create_person()
# Çıktı:
# Person created with properties:
# (özellik olmadığı için ek çıktı yok)
elif test_case == "many_properties":
create_person(name="Alice", age=30, occupation="Doctor", city="New York",
country="USA", hobby="Reading", email="alice@example.com")
# Çıktı:
# Person created with properties:
# name: Alice
# age: 30
# occupation: Doctor
# city: New York
# country: USA
# hobby: Reading
# email: alice@example.com
elif test_case == "special_characters":
create_person(name="Bob", email="bob@example.com", phone="123-456-7890")
# Çıktı:
# Person created with properties:
# name: Bob
# email: bob@example.com
# phone: 123-456-7890
elif test_case == "numeric_keys":
create_person(name="Charlie", age=35, height=175, weight=70)
# Çıktı:
# Person created with properties:
# name: Charlie
# age: 35
# height: 175
# weight: 70
elif test_case == "boolean_values":
create_person(name="David", is_student=True, is_employed=False)
# Çıktı:
# Person created with properties:
# name: David
# is_student: True
# is_employed: False
elif test_case == "nested_structures":
create_person(name="Eve", hobbies=["Reading", "Swimming", "Coding"],
address={"city": "Boston", "state": "MA", "zip": "02108"})
# Çıktı:
# Person created with properties:
# name: Eve
# hobbies: ['Reading', 'Swimming', 'Coding']
# address: {'city': 'Boston', 'state': 'MA', 'zip': '02108'}
elif test_case == "unicode_characters":
create_person(name="José", city="São Paulo", country="Brasil")
# Çıktı:
# Person created with properties:
# name: José
# city: São Paulo
# country: Brasil
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Nesne Yönelimli Programlamanın Temelleri
Nesne Yönelimli Programlamaya GirişHarici DosyalarSınıflar ve Nesnelerself ParametresiMetotlarÖzniteliklerKurucu Metot (__init__)Tekrar - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımsuper() FonksiyonuMetot Geçersiz KılmaÇoklu KalıtımMetot Çözümleme SırasıÖzet - Çalışan Hiyerarşisi7Özel Metotlar
Sihirli Metotlara GirişOperatör Aşırı YüklemeKapsayıcı Sihirli MetotlarıÖzet - Özel Liste10Tasarım Kalıpları Bölüm 1
Tasarım kalıplarına girişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı13Final Meydan Okumaları
E-öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi5Çok Biçimlilik (Polymorphism)
Metot Geçersiz Kılmaya Yeniden BakışDuck TypingSoyut Sınıflar ve MetotlarArayüz TasarımıÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon ve KalıtımMixinsStatik ve Sınıf MetotlarıSınıf DekoratörleriBağlam Yöneticileri11Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıKendi başına pratik yap: Online Python derleyicisi