Menu
Coddy logo textTech

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

Normal 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
- Diana

Metotları ç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.

challenge icon

Görev

Kolay

Bu 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)  # 150

Normal 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ürmeli
quiz iconKendini test et

Bu 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