Jak używać *args i **kwargs w funkcjach Pythona
Opanuj *args i **kwargs w Pythonie. Dowiedz się, jak pisać elastyczne funkcje z dynamicznymi argumentami pozycyjnymi i kluczowymi, rozpakowywać kolekcje i budować funkcje opakowujące.
Przegląd
W Pythonie często będziesz musiał projektować funkcje, które akceptują zmienną liczbę argumentów. Na przykład funkcja obliczająca sumę dowolnej liczby liczb całkowitych lub funkcja rejestrująca metadane z różnymi polami. Zamiast zmuszać użytkowników do przekazania listy lub słownika, Python udostępnia dwa specjalne symbole: `*args` i `**kwargs`.
Składnia `*args` pozwala funkcji przyjmować dowolną liczbę argumentów pozycyjnych. Pojedyncza gwiazdka `*` pełni rolę operatora rozpakowywania. Umieszczona w definicji funkcji zbiera dodatkowe argumenty pozycyjne w krotce o nazwie „args”. Dzięki temu możesz z łatwością iterować po wartościach wejściowych, uruchamiać obliczenia lub przekazywać je do innej funkcji.
Z drugiej strony składnia `**kwargs` pozwala funkcji przyjąć dowolną liczbę argumentów słów kluczowych (nazwanych). Podwójna gwiazdka `**` zbiera te argumenty w słowniku o nazwie `kwargs`. Jest to niezwykle przydatne do przekazywania opcjonalnych konfiguracji, argumentów stylizujących lub atrybutów bazy danych. Pamiętaj, że nazwy „args” i „kwargs” są konwencjami; rzeczywista funkcjonalność jest oznaczona pojedynczymi i podwójnymi gwiazdkami.
Dane wyjściowe kodu i wykonania
Ten kod demonstruje użycie *args do sumowania liczb zmiennych, **kwargs do drukowania profili użytkowników i połączenie obu w jedną funkcję.
def sum_all(*args):
print("args type:", type(args).__name__)
return sum(args)
print("Sum (1, 2, 3):", sum_all(1, 2, 3))
print("Sum (10, 20):", sum_all(10, 20))
def print_profile(**kwargs):
print("kwargs type:", type(kwargs).__name__)
for key, value in kwargs.items():
print(f"{key}: {value}")
print_profile(name="Bob", role="developer", country="US")
def master_function(first, *args, **kwargs):
print(f"First argument: {first}")
print(f"Additional positional args: {args}")
print(f"Keyword args: {kwargs}")
master_function("hello", 1, 2, 3, debug=True, user_id=42)args type: tuple
Sum (1, 2, 3): 6
args type: tuple
Sum (10, 20): 30
kwargs type: dict
name: Bob
role: developer
country: US
First argument: hello
Additional positional args: (1, 2, 3)
Keyword args: {'debug': True, 'user_id': 42}Wdrażanie krok po kroku
- Użyj pojedynczej gwiazdki przed parametrem (np. *args), aby zebrać argumenty pozycyjne w krotkę.
- Użyj podwójnej gwiazdki przed parametrem (np. **kwargs), aby zebrać argumenty słów kluczowych do słownika.
- Zachowaj prawidłową kolejność parametrów: parametry standardowe, *args, parametry zawierające tylko słowa kluczowe, a następnie **kwargs.
- Używaj składni rozpakowywania podczas wywoływania funkcji, przekazując *iterowalny lub **słownik.
Często zadawane pytania
Czy muszę używać nazw „args” i „kwargs”?
Nie, to są standardowe konwencje społeczne. Składniowo wymagane są jedynie przedrostki * i **. Można pisać *wartości i **opcje, ale ze względu na czytelność zdecydowanie zaleca się trzymanie się *args i **kwargs.
Jaka jest prawidłowa kolejność przy definiowaniu funkcji?
Prawidłowa kolejność argumentów w sygnaturze funkcji to: argumenty pozycyjne, *args, argumenty zawierające tylko słowa kluczowe i na koniec **kwargs.
Powiązane tematy
Dowiedz się, jak utworzyć klasę w Pythonie. Opanuj konstruktora __init__, metody instancji, słowo kluczowe self i tworzenie instancji obiektów.
Jak korzystać z funkcji Lambda w PythonieDowiedz się, jak używać funkcji lambda w Pythonie. Opanuj anonimowe funkcje, wbudowane wywołania zwrotne i sortowanie danych list za pomocą kluczy lambda.
Polecane zasoby Pythona
Poszerzaj swoją wiedzę dzięki powiązanym interaktywnym samouczkom, ściągawkom i porównaniom kodów.
Pętle Pythona
Dowiedz się, jak używać pętli Pythona do iteracji danych. Opanuj pętle for, pętle while, przerywaj, kontynuuj i pętluj najlepsze praktyki dzięki interaktywnym przykładom.
Ściągawka dotycząca metod ciągów w Pythonie
Kompletny przewodnik dotyczący manipulacji ciągami znaków w języku Python. Opanuj formatowanie, wyszukiwanie, dzielenie, zastępowanie i sprawdzanie właściwości ciągów.
Python kontra JavaScript: który język programowania jest najlepszy?
Kompleksowe porównanie Pythona i JavaScript. Poznaj różnice w składni, wydajność, przypadki użycia (backend vs frontend) i przykłady kodowania.