Στην Python, οι λίστες (πίνακες), οι πλειάδες και τα λεξικά μπορούν να επεκταθούν (αποσυμπιεστούν) και τα αντίστοιχα στοιχεία τους μπορούν να περάσουν μαζί ως ορίσματα συναρτήσεων.
Κατά την κλήση μιας συνάρτησης, προσδιορίστε το όρισμα με * για λίστες και πλειάδες και ** για λεξικά. Σημειώστε τον αριθμό των αστερίσκων *.
Εδώ περιγράφονται οι ακόλουθες λεπτομέρειες.
- Ανάπτυξη (αποσυμπίεση) μιας λίστας ή πλειάδας με * (ένας αστερίσκος)
- Για συναρτήσεις με προεπιλεγμένα ορίσματα
- Για συναρτήσεις με ορίσματα μεταβλητού μήκους
- Επεκτείνετε (ξεπακετάρετε) το λεξικό με ** (δύο αστερίσκους)
- Για συναρτήσεις με προεπιλεγμένα ορίσματα
- Για συναρτήσεις με ορίσματα μεταβλητού μήκους
Ανατρέξτε στο ακόλουθο άρθρο για τη βασική χρήση των συναρτήσεων της Python, τα προεπιλεγμένα ορίσματα και τα ορίσματα μεταβλητού μήκους με *,** κατά τον ορισμό συναρτήσεων.
- ΣΧΕΤΙΚΑ:Πώς να χρησιμοποιείτε και να σημειώνετε προεπιλεγμένα ορίσματα σε συναρτήσεις της Python
- ΣΧΕΤΙΚΑ:Πώς να χρησιμοποιήσετε ορίσματα μεταβλητού μήκους στην Python(
*args
,**kwargs
)
Ανάπτυξη (αποσυμπίεση) μιας λίστας ή πλειάδας με * (ένας αστερίσκος)
Όταν μια λίστα ή πλειάδα καθορίζεται ως όρισμα με *, επεκτείνεται και κάθε στοιχείο περνάει ως ξεχωριστό όρισμα.
def func(arg1, arg2, arg3):
print('arg1 =', arg1)
print('arg2 =', arg2)
print('arg3 =', arg3)
l = ['one', 'two', 'three']
func(*l)
# arg1 = one
# arg2 = two
# arg3 = three
func(*['one', 'two', 'three'])
# arg1 = one
# arg2 = two
# arg3 = three
t = ('one', 'two', 'three')
func(*t)
# arg1 = one
# arg2 = two
# arg3 = three
func(*('one', 'two', 'three'))
# arg1 = one
# arg2 = two
# arg3 = three
Η ακόλουθη εξήγηση αφορά μια λίστα, αλλά το ίδιο ισχύει και για μια πλειάδα.
Εάν ο αριθμός των στοιχείων δεν συμφωνεί με τον αριθμό των επιχειρημάτων, εμφανίζεται σφάλμα TypeError.
# func(*['one', 'two'])
# TypeError: func() missing 1 required positional argument: 'arg3'
# func(*['one', 'two', 'three', 'four'])
# TypeError: func() takes 3 positional arguments but 4 were given
Για συναρτήσεις με προεπιλεγμένα ορίσματα
Εάν έχει οριστεί ένα προεπιλεγμένο όρισμα, το προεπιλεγμένο όρισμα χρησιμοποιείται εάν ο αριθμός των στοιχείων είναι ανεπαρκής. Εάν ο αριθμός των στοιχείων είναι πολύ μεγάλος, εμφανίζεται σφάλμα TypeError.
def func_default(arg1=1, arg2=2, arg3=3):
print('arg1 =', arg1)
print('arg2 =', arg2)
print('arg3 =', arg3)
func_default(*['one', 'two'])
# arg1 = one
# arg2 = two
# arg3 = 3
func_default(*['one'])
# arg1 = one
# arg2 = 2
# arg3 = 3
# func_default(*['one', 'two', 'three', 'four'])
# TypeError: func_default() takes from 0 to 3 positional arguments but 4 were given
Για συναρτήσεις με ορίσματα μεταβλητού μήκους
Εάν έχει οριστεί όρισμα μεταβλητού μήκους, όλα τα στοιχεία μετά το στοιχείο για το όρισμα θέσης μεταβιβάζονται στο όρισμα μεταβλητού μήκους.
def func_args(arg1, *args):
print('arg1 =', arg1)
print('args =', args)
func_args(*['one', 'two'])
# arg1 = one
# args = ('two',)
func_args(*['one', 'two', 'three'])
# arg1 = one
# args = ('two', 'three')
func_args(*['one', 'two', 'three', 'four'])
# arg1 = one
# args = ('two', 'three', 'four')
Επεκτείνετε (ξεπακετάρετε) το λεξικό με ** (δύο αστερίσκους)
Όταν ένα λεξικό dict καθορίζεται ως όρισμα με **, τα κλειδιά των στοιχείων αναπτύσσονται ως ονόματα του επιχειρήματος και οι τιμές ως τιμές του επιχειρήματος και το καθένα από αυτά μεταβιβάζεται ως ξεχωριστό όρισμα.
def func(arg1, arg2, arg3):
print('arg1 =', arg1)
print('arg2 =', arg2)
print('arg3 =', arg3)
d = {'arg1': 'one', 'arg2': 'two', 'arg3': 'three'}
func(**d)
# arg1 = one
# arg2 = two
# arg3 = three
func(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three'})
# arg1 = one
# arg2 = two
# arg3 = three
Εάν δεν υπάρχει κλειδί που να ταιριάζει με το όνομα του ορίσματος ή υπάρχει κλειδί που δεν ταιριάζει, θα προκύψει σφάλμα TypeError.
# func(**{'arg1': 'one', 'arg2': 'two'})
# TypeError: func() missing 1 required positional argument: 'arg3'
# func(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three', 'arg4': 'four'})
# TypeError: func() got an unexpected keyword argument 'arg4'
Για συναρτήσεις με προεπιλεγμένα ορίσματα
Εικόνα στην οποία ενημερώνονται μόνο οι τιμές των ονομάτων των επιχειρημάτων που αντιστοιχούν στα κλειδιά του λεξικού.
Ένα κλειδί που δεν ταιριάζει με το όνομα του ορίσματος θα οδηγήσει σε σφάλμα TypeError.
def func_default(arg1=1, arg2=2, arg3=3):
print('arg1 =', arg1)
print('arg2 =', arg2)
print('arg3 =', arg3)
func_default(**{'arg1': 'one'})
# arg1 = one
# arg2 = 2
# arg3 = 3
func_default(**{'arg2': 'two', 'arg3': 'three'})
# arg1 = 1
# arg2 = two
# arg3 = three
# func_default(**{'arg1': 'one', 'arg4': 'four'})
# TypeError: func_default() got an unexpected keyword argument 'arg4'
Για συναρτήσεις με ορίσματα μεταβλητού μήκους
Εάν έχουν οριστεί ορίσματα μεταβλητού μήκους, κάθε στοιχείο με κλειδί διαφορετικό από το όνομα του ορίσματος που ορίζεται ως όρισμα περνάει στο όρισμα μεταβλητού μήκους.
def func_kwargs(arg1, **kwargs):
print('arg1 =', arg1)
print('kwargs =', kwargs)
func_kwargs(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three'})
# arg1 = one
# kwargs = {'arg2': 'two', 'arg3': 'three'}
func_kwargs(**{'arg1': 'one', 'arg2': 'two', 'arg3': 'three', 'arg4': 'four'})
# arg1 = one
# kwargs = {'arg2': 'two', 'arg3': 'three', 'arg4': 'four'}
func_kwargs(**{'arg1': 'one', 'arg3': 'three'})
# arg1 = one
# kwargs = {'arg3': 'three'}