*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
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