Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι

ΘΕΜΑ: Ερώτηση σχετικά με τα starred arguments

Ερώτηση σχετικά με τα starred arguments 11 Χρόνια 1 Μήνας πριν #1888

  • vassilis
  • Το Άβαταρ του/της vassilis
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 11
Διαβάζοντας τις οδηγίες το οδηγού A Byte of Python σε ένα παράδειγμα κόλισα . Μπορεί κάποιος να δώσει μια βοήθεια να μου εξηγήσει ακριβώς πως τρέχει το πρόγραμμα και ποια η χρήση των * ή ** σε αυτήν την περίπτωση;
Ευχαριστώ

Πρόγραμμα:
def total(initial=5, *numbers, **keywords):
    count = initial
    for number in numbers:
        count += number
    for key in keywords:
        count += keywords[key]
    return count
 
print(total(10, 1, 2, 3, vegetables=50, fruits=100))
Τελευταία διόρθωση: 11 Χρόνια 1 Μήνας πριν από vassilis.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

Ερώτηση σχετικά με τα starred arguments 11 Χρόνια 1 Μήνας πριν #1889

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
Γράφεις σε python2 η σε Python3? Γιατί υπάρχει μία μικρή διαφορά μεταξύ των δύο σε σχέση με τα "starred arguments". Αλλά είναι λίγο λεπτομέρεια και μπορεί να σε μπερδέψει. Ξεκαθάρισε πρώτα τα παρακάτω.

Όπως και αν έχει, μία συνάρτηση που έχει στα arguments της το "*args" μπορεί να δεχτεί τυχαίο αριθμό positional arguments ενώ μία συνάρτηση που θα έχει το "**kwargs" μπορεί να δεχτεί τυχαίο αριθμό keyword arguments. Δες πχ αυτό
def f(*args):
    print(args)
 
def g(a, b, c):
    print(a, b, c)
 
f()
f(1)
f(1, 2)
f(1, 2, 3, "asdf")
g(1)
Όπως θα δεις αν εκτελέσεις το παραπάνω, η f τρέχει χωρίς να την νοιάζει πόσα arguments πέρασες, ενώ η g αν δεν της δώσεις 3 θα πετάξει exception.

Η διαφορά του *args με το **kwargs είναι οτι το δεύτερο αφορά keyword arguments. Πχ
def f(**kwargs):
    print(kwargs)
 
f()
f(a=1)
f(a=1, b=2)
f(a=1, b=2, c=3)
f(1)
Πρόσεξε ότι η τελευταία κλήση θα πετάξει exception γιατί δίνεις positional και όχι keyword argument.

Μια άλλη διαφορά μεταξύ τους είναι ότι το args είναι μία λίστα ενώ το kwargs είναι ένα dictionary. Δες πχ
def f(*args, **kwargs):
    print("args   : ", type(args))
    print("kwargs : ", type(kwargs))
 
f(1, 2, 3, 4, a="asfd", b="qwer", c=232.32)

Τα ονόματα args και kwargs δεν παίζουν κανένα ρόλο, αλλά συνηθίζεται να ονομάζονται έτσι. Αυτό που έχει σημασία κάθε φορά, είναι η ύπαρξη του ενός και των δύο "*" ανίστοιχα. Δηλαδή η f και η g είναι ακριβώς ισοδύναμες.
def f(*args, **kwargs):
    pass
 
def g(*my_args, **my_kwargs):
    pass

Δες και αυτά
stackoverflow.com/questions/2921847/pyth...rator-mean-in-python
www.python-course.eu/passing_arguments.php
Τελευταία διόρθωση: 11 Χρόνια 1 Μήνας πριν από pmav99.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Οι ακόλουθοι χρήστες είπαν "Σε Ευχαριστώ": vassilis
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.297 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου