*args Kullanımı
Coddy'nin Python Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 42 / 64.
*args parametresi, bir metodun herhangi sayıda konumsal bağımsız değişken kabul etmesini sağlar. Yıldız işareti, tüm ek konumsal bağımsız değişkenleri bir demet içinde toplar.
İşte *args kullanan bir yöntem ö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}")Yöntemi farklı sayıda bağımsız değişkenle ç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 bağımsız değişkenleri bir demet 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")Kurucu yöntemlerde *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 bağımsız değişkenleri de açabilirsiniz:
numbers = [1, 2, 3, 4, 5]
result = calc.add_numbers(*numbers) # Listeyi açar
print(result) # 15Temel Nokta: *args, herhangi bir sayıda konumsal bağımsız değişkeni bir demet içinde toplar. Bir metoda kaç bağımsız değişken geçirileceğini bilmediğinizde bunu kullanın. args adı gelenekseldir; yıldız işaretinden sonra herhangi bir ad kullanabilirsiniz, ancak args standarttır.
Görev
KolayBu mücadelede esnek bir sayı yardımcı fonksiyonu uygulayacaksın.
number_utils.py dosyasını düzenleyerek, herhangi sayıda sayısal bağımsız değişken kabul eden ve bunların toplamını döndüren sum_all_numbers fonksiyonunu uygula. Fonksiyon şunları yapmalıdır:
- Hiç bağımsız değişken sağlanmazsa 0 döndürmeli
- Sayısal olmayan bağımsız değişkenlerden herhangi biri sağlanırsa "Error: All arguments must be numbers" yazdırmalı ve None döndürmeli
- Boolean değerler (
True/False) burada sayı olarak kabul edilmez veboolsınıfıintsınıfının bir alt sınıfı olsa bile reddedilmelidir
number_utils.py dosyası, uygulamanı yönlendirmek için ayrıntılı TODO yorumları içerir. Çözümünün tüm gereksinimleri karşıladığından emin olmak için bu yorumları dikkatle takip et.
Kendin dene
from number_utils import sum_all_numbers
# Kapsamlı test durumu işleyicisi
test_case = input()
if test_case == "basic_test":
# Pozitif tamsayı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":
# Kayan noktalı 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":
# Tamsayılar ve kayan noktalı sayıların bir 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ğerlerle 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
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
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
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
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 bir karışımıyla test
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":
# Argümansız test
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.
Nesne Yönelimli Programlama 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ıKendi başına pratik yap: Online Python derleyicisi