*args Kullanımı
Coddy'nin Python Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 42 / 64.
*args parametresi, bir metodun herhangi bir sayıda konumsal argüman kabul etmesine olanak tanır. Yıldız işareti, tüm ekstra konumsal argümanları bir demet (tuple) içine toplar.
İşte *args kullanan bir metod örneği:
class Calculator:
def add_numbers(self, *args):
return sum(args)
def show_numbers(self, *args):
for i, num in enumerate(args):
print(f"Number {i+1}: {num}")Metodu farklı sayıda argümanla çağırın:
calc = Calculator()
result1 = calc.add_numbers(1, 2, 3)
result2 = calc.add_numbers(10, 20, 30, 40, 50)
print(result1) # 6
print(result2) # 150*args, tüm argümanları bir demet (tuple) içinde toplar:
calc.show_numbers(5, 10, 15, 20)Çıktı:
Number 1: 5
Number 2: 10
Number 3: 15
Number 4: 20Normal parametreleri *args ile birleştirin:
class Logger:
def log_message(self, level, *messages):
print(f"[{level}]", end=" ")
for message in messages:
print(message, end=" ")
print() # Yeni satır
logger = Logger()
logger.log_message("INFO", "User", "logged", "in")
logger.log_message("ERROR", "Connection", "failed")Yapıcı metotlarda *args kullanın:
class Team:
def __init__(self, team_name, *players):
self.team_name = team_name
self.players = list(players)
def show_team(self):
print(f"Team: {self.team_name}")
for player in self.players:
print(f"- {player}")
team = Team("Warriors", "Alice", "Bob", "Charlie", "Diana")
team.show_team()Çıktı:
6
150
Number 1: 5
Number 2: 10
Number 3: 15
Number 4: 20
[INFO] User logged in
[ERROR] Connection failed
Team: Warriors
- Alice
- Bob
- Charlie
- DianaMetotları çağırırken argümanları da açabilirsiniz:
numbers = [1, 2, 3, 4, 5]
result = calc.add_numbers(*numbers) # Listeyi açar
print(result) # 15Önemli Nokta: *args, herhangi bir sayıda konumsal argümanı bir demet (tuple) içinde toplar. Bir metoda kaç tane argüman iletileceğini bilmediğinizde bunu kullanın. args ismi gelenekseldir - yıldız işaretinden sonra herhangi bir isim kullanabilirsiniz, ancak args standarttır.
Görev
KolayBu meydan okumada, esnek bir sayı yardımcı fonksiyonu uygulayacaksınız.
Herhangi bir sayıda sayısal argümanı kabul eden ve bunların toplamını döndüren sum_all_numbers fonksiyonunu uygulamak için number_utils.py dosyasını düzenleyin. Fonksiyon şunları yapmalıdır:
- Hiçbir argüman sağlanmazsa 0 döndürmeli
- Herhangi bir sayısal olmayan argüman sağlanırsa "Error: All arguments must be numbers" yazdırmalı ve None döndürmelidir
number_utils.py dosyası, uygulamanıza rehberlik edecek ayrıntılı TODO yorumları içerir. Çözümünüzün tüm gereksinimleri karşıladığından emin olmak için bu yorumları dikkatlice izleyin.
Kopya kağıdı
*args parametresi, bir metodun herhangi bir sayıda konumsal bağımsız değişken (positional argument) kabul etmesine olanak tanır. Yıldız işareti, tüm ekstra konumsal bağımsız değişkenleri bir demet (tuple) içinde toplar.
*args'ın temel kullanımı:
class Calculator:
def add_numbers(self, *args):
return sum(args)
calc = Calculator()
result1 = calc.add_numbers(1, 2, 3) # 6
result2 = calc.add_numbers(10, 20, 30, 40, 50) # 150Normal parametreleri *args ile birleştirin:
class Logger:
def log_message(self, level, *messages):
print(f"[{level}]", end=" ")
for message in messages:
print(message, end=" ")
print()
logger = Logger()
logger.log_message("INFO", "User", "logged", "in")Yapıcı (constructor) metodlarda *args kullanın:
class Team:
def __init__(self, team_name, *players):
self.team_name = team_name
self.players = list(players)
team = Team("Warriors", "Alice", "Bob", "Charlie")Metodları çağırırken bağımsız değişkenleri açın (unpack):
numbers = [1, 2, 3, 4, 5]
result = calc.add_numbers(*numbers) # Listeyi açarÖnemli Nokta: *args, herhangi bir sayıdaki konumsal bağımsız değişkeni bir demet (tuple) içinde toplar. args ismi gelenekseldir ancak yıldız işaretinden sonra herhangi bir isim kullanabilirsiniz.
Kendin dene
from number_utils import sum_all_numbers
# Kapsamlı test durumu işleyicisi
test_case = input()
if test_case == "basic_test":
# Pozitif tam sayılarla temel işlevselliği test et
print(sum_all_numbers(1, 2, 3)) # 6 döndürmeli
print(sum_all_numbers()) # 0 döndürmeli
print(sum_all_numbers(10, 20, 30, 40)) # 100 döndürmeli
print(sum_all_numbers(1, 2, "three")) # Hata yazdırmalı ve None döndürmeli
elif test_case == "float_test":
# Ondalıklı sayılarla test et
print(sum_all_numbers(1.1, 2.2, 3.3)) # 6.6 döndürmeli
print(sum_all_numbers(5.5, 5.0)) # 10.5 döndürmeli
elif test_case == "mixed_numbers_test":
# Tam sayılar ve ondalıklı sayıların karışımıyla test et
print(sum_all_numbers(5, 5.5)) # 10.5 döndürmeli
print(sum_all_numbers(10, 20.5, 30, 40)) # 100.5 döndürmeli
elif test_case == "zero_values_test":
# Sıfır değerleriyle test et
print(sum_all_numbers(0, 0, 0)) # 0 döndürmeli
print(sum_all_numbers(0)) # 0 döndürmeli
print(sum_all_numbers()) # 0 döndürmeli
elif test_case == "negative_values_test":
# Negatif değerlerle test et
print(sum_all_numbers(-1, -2, -3)) # -6 döndürmeli
print(sum_all_numbers(-5, -5)) # -10 döndürmeli
print(sum_all_numbers(-5, 5)) # 0 döndürmeli
elif test_case == "large_values_test":
# Çok büyük değerlerle test et
print(sum_all_numbers(1000000000, 1000000000)) # 2000000000 döndürmeli
print(sum_all_numbers(1000000000, 2000000000.5)) # 3000000000.5 döndürmeli
elif test_case == "single_value_test":
# Tek bir değerle test et
print(sum_all_numbers(5)) # 5 döndürmeli
print(sum_all_numbers(-10)) # -10 döndürmeli
print(sum_all_numbers(3.5)) # 3.5 döndürmeli
elif test_case == "error_handling_test":
# Çeşitli sayısal olmayan değerlerle test et
print(sum_all_numbers("string")) # Hata yazdırmalı ve None döndürmeli
print(sum_all_numbers([1, 2, 3])) # Hata yazdırmalı ve None döndürmeli
print(sum_all_numbers({"key": "value"})) # Hata yazdırmalı ve None döndürmeli
print(sum_all_numbers(True)) # Hata yazdırmalı ve None döndürmeli
print(sum_all_numbers(None)) # Hata yazdırmalı ve None döndürmeli
elif test_case == "mixed_valid_invalid_test":
# Geçerli ve geçersiz değerlerin karışımıyla test et
print(sum_all_numbers(1, 2, "three")) # Hata yazdırmalı ve None döndürmeli
print(sum_all_numbers(1, [2, 3], 4)) # Hata yazdırmalı ve None döndürmeli
print(sum_all_numbers(1.5, "two", 3)) # Hata yazdırmalı ve None döndürmeli
elif test_case == "empty_args_test":
# Hiç argüman olmadan test et
print(sum_all_numbers()) # 0 döndürmeliBu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Object Oriented Programming bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerself ParametresiMetotlarÖzniteliklerYapıcı Metot (__init__)Özet - 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ı