Funkcje w Pythonie
Ten artykuł wyjaśnia funkcje w Pythonie.
YouTube Video
Funkcje w Pythonie
Funkcje w Pythonie są kluczowym elementem służącym do definiowania wielokrotnego użytku bloków kodu, umożliwiając organizację i upraszczanie programu przez wywoływanie ich w razie potrzeby. Korzystanie z funkcji może poprawić czytelność kodu i przestrzegać zasady DRY (Don't Repeat Yourself, unikaj pisania tego samego kodu wielokrotnie).
Definiowanie funkcji
Funkcje są definiowane za pomocą słowa kluczowego def
. Podstawowa składnia wygląda następująco:.
1def function_name(arg1, arg2, ..., argN):
2 """docstring (A brief description of the function)"""
3 processing
4 return return_value
Na przykład, aby zdefiniować funkcję, która dodaje dwie liczby, napisałbyś:.
1def add(x, y):
2 """A function that adds two numbers and returns the result"""
3 return x + y
Wywoływanie funkcji
Zdefiniowaną funkcję można wywołać i użyć w następujący sposób:.
1result = add(3, 4)
2print(result) # Output: 7
Składniki funkcji
-
Nazwa funkcji: Nazwa funkcji, używana do jej wywołania.
-
Argumenty (parametry): Nazwy zmiennych, które przyjmują dane przekazane podczas wywołania. Możesz zdefiniować zero lub więcej argumentów.
-
Łańcuch dokumentacji (Docstring): Łańcuch używany do opisania celu i zastosowania funkcji. Opcjonalne.
-
Ciało funkcji: Wcięty blok, w którym zapisane są instrukcje wykonywane przez funkcję.
-
Wartość zwrócona: Wartość zwrócona do wywołującego za pomocą instrukcji
return
. Jeślireturn
zostanie pominięty, domyślnie zostanie zwróconeNone
.
Typy argumentów
W Pythonie istnieje kilka typów argumentów.
- Argumenty pozycyjne: Standardowy sposób przekazywania argumentów do funkcji.
- Argumenty domyślne: Argumenty z wartościami domyślnymi, które można pominąć podczas wywołania.
1def greet(name, message="Hello"):
2 print(f"{message}, {name}")
3
4greet("Alice") # "Hello, Alice"
5greet("Bob", "Good morning") # "Good morning, Bob"
- Argumenty o zmiennej długości:
*args
do odbioru wielu pozycyjnych argumentów jako krotka oraz**kwargs
do odbioru ich jako słownik.
1def func(*args, **kwargs):
2 print("args:", args)
3 print("kwargs:", kwargs)
4
5func(1, 2, 3, a=4, b=5)
6# Output:
7# args: (1, 2, 3)
8# kwargs: {'a': 4, 'b': 5}
Poprawne użycie funkcji pozwala pisać programy w Pythonie bardziej efektywnie i wydajnie.
Funkcje lambda w Pythonie
W Pythonie funkcje lambda
są używane do definiowania anonimowych, zwięzłych funkcji. W przeciwieństwie do funkcji definiowanych za pomocą standardowego słowa kluczowego def
, lambda
pozwala tworzyć krótkie, jedno-liniowe funkcje. Tutaj szczegółowo wyjaśnimy funkcje lambda
w Pythonie.
Podstawy funkcji lambda
Funkcje lambda
, zwane również funkcjami anonimowymi, służą do definiowania tymczasowych funkcji, które nie mają nazwy, jak sama nazwa wskazuje. Podstawowa składnia wygląda następująco:.
1lambda arguments: expression
arguments
: Określ argumenty funkcji. Można określić wiele argumentów oddzielonych przecinkami.expression
: Jest to wyrażenie, które jest oceniane na podstawie podanych argumentów. Wynik wyrażenia staje się wartością zwracaną przez funkcję.
Na przykład, poniższy kod definiuje i wykonuje funkcję lambda
, która dodaje dwie liczby.
1add = lambda x, y: x + y
2print(add(5, 3)) # Output: 8
W tym przykładzie lambda x, y: x + y
to funkcja lambda
, która przyjmuje dwa argumenty, x
i y
, i zwraca ich sumę.
Zastosowania funkcji lambda
Funkcje lambda
są przydatne w sytuacjach, gdy trzeba zdefiniować prostą funkcję na miejscu. Są szczególnie powszechne w następujących przypadkach:.
-
Gdy są przekazywane jako argumenty do funkcji
- Jest to przydatne w funkcjach wyższego rzędu (funkcjach przyjmujących inne funkcje jako argumenty) podczas przekazywania krótkich, tymczasowych funkcji.
-
Gdy określasz klucze do sortowania list
- Są przydatne do określania kryteriów sortowania (kluczy) w funkcjach takich jak
sort()
lubsorted()
.
- Są przydatne do określania kryteriów sortowania (kluczy) w funkcjach takich jak
Przykład użycia w funkcjach wyższego rzędu
Typowymi przykładami funkcji wyższego rzędu są map()
, filter()
i reduce()
. Te funkcje przyjmują inne funkcje jako argumenty i stosują je do sekwencji, takich jak listy.
1numbers = [1, 2, 3, 4, 5]
2squared = list(map(lambda x: x ** 2, numbers))
3print(squared) # Output: [1, 4, 9, 16, 25]
W tym przykładzie funkcja lambda
jest przekazywana do funkcji map()
w celu podniesienia do kwadratu każdej liczby na liście.
Przykłady sortowania list
Funkcja lambda
może być czasami używana do określenia własnego klucza podczas sortowania listy. Na przykład poniższy kod sortuje listę krotek na podstawie drugiego elementu.
1pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
2pairs.sort(key=lambda pair: pair[1])
3print(pairs)
4# Output: [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]
W tym przykładzie funkcja lambda
jest używana do sortowania krotek na podstawie ich drugiego elementu (napisu).
filter()
i lambda
Funkcja filter()
jest używana do filtrowania elementów w liście (lub innym iterowalnym obiekcie) na podstawie określonego warunku.
1numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
2even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
3print(even_numbers) # Output: [2, 4, 6, 8]
W tym przykładzie liczby parzyste w liście są filtrowane w celu utworzenia nowej listy.
lambda
i reduce()
Funkcja reduce()
jest używana do sprowadzenia listy do pojedynczej wartości. Można to łatwo zaimplementować za pomocą funkcji lambda
.
1from functools import reduce
2
3numbers = [1, 2, 3, 4, 5]
4product = reduce(lambda x, y: x * y, numbers)
5print(product) # Output: 120
W tym przykładzie wszystkie elementy w liście są mnożone razem w celu uzyskania wyniku.
Unikaj używania złożonych funkcji lambda
Zaletą funkcji lambda
jest ich zwięzłość, ale stają się trudniejsze do odczytania podczas implementowania złożonej logiki. Dlatego stosowanie ich w prostych operacjach, które można wyrazić w jednej linii, jest odpowiednie. W przypadku złożonych operacji definiowanie funkcji za pomocą def
jest bardziej czytelne i łatwiejsze do utrzymania.
Na przykład, powinieneś unikać używania złożonych funkcji lambda
takich jak poniżej.
1# Complex and hard-to-read lambda function
2complex_func = lambda x, y: (x * 2 + y) if x > y else (x + y * 2)
W tym przypadku lepiej jest użyć funkcji zdefiniowanej za pomocą def
, jak pokazano poniżej.
1def complex_func(x, y):
2 if x > y:
3 return x * 2 + y
4 else:
5 return x + y * 2
Wnioski
Funkcje lambda
w Pythonie są wygodnym narzędziem do definiowania tymczasowych, krótkich funkcji. Są często używane w funkcjach wyższego rzędu lub operacjach na listach do zwięzłego definiowania określonych warunków. Jednak funkcje lambda
powinny być ograniczone do prostych zadań, a dla złożonej logiki należy preferować funkcje def
.
Możesz śledzić ten artykuł, korzystając z Visual Studio Code na naszym kanale YouTube. Proszę również sprawdzić nasz kanał YouTube.