Funktionale Programmierung
Funktionale Programmierung
Trennung der Belange - Funktionen arbeiten mit klar definierten Datenstrukturen wie Listen und Wörterbüchern. - Anstatt diese Datenstruktur einem Objekt zuzuordnen.
Reine Funktionen - Die Idee dahinter ist, dass es eine Trennung zwischen den Daten eines Programms und dem Verhalten eines Programms gibt. - Hat keine Nebenwirkungen, ändert nichts außerhalb der Funktion, dieselbe Eingabe gibt dieselbe Ausgabe zurück.
def multiply_by_two(li):
new_list = []
for item in li:
new_list.append (item * 2)
return new_list
print(multiply_by_two([1,2,3])) # [2,4,6]
Funktionen für das Paradigma der funktionalen Programmierung.
Funktionen höherer Ordnung (integriert)
Python bietet integrierte Funktionen höherer Ordnung: - Karte, Filter, Reduzieren, Zip, Lambda.
Karte
- Wendet eine Funktion auf jedes Element in einer Iterable an.
- Map ist nützlich, wenn wir etwas haben, über das wir iterieren können, und eine Funktion anwenden möchten.
def mul_by_five(item):
return item * 5
my_list = [1,2,3]
print(list(map(mul_by_five, my_list))) # [5, 10, 15]
print(my_list) # [1, 2, 3] original list is unchanged
Karte gibt die gleiche Anzahl von Elementen wie die Eingabe zurück
names = ["alice", "bob", "charlie"]
print(list(map(str.capitalize, names))) # ['Alice', 'Bob', 'Charlie']
Filter
- Filtert Elemente basierend auf einer Bedingung.
- Filter ist nützlich, wenn Sie Elemente basierend auf einer Bedingung aus einer Iterable herausfiltern möchten.
def only_even(item):
return item % 2 == 0
def only_odd(item):
return item % 2 != 0
print(list(filter(only_even, my_list))) # [2]
print(list(filter(only_odd, my_list))) # [1, 3]
name = ["Alice", "Bob", "Charlie", "David", 'Ava']
def starts_with_a(name):
return name.startswith('A')
print(list(filter(starts_with_a, name))) # ['Alice', 'Ava']
zip
- Kombiniert mehrere Iterables zu Tupeln.
- zip funktioniert wie ein Reißverschluss, es nimmt zwei oder mehr Iterables und kombiniert sie zu einem einzigen Iterable von Tupeln
list1 = [1,2,3]
list2 = (10,20,30) #Doesn't have to be the same data type, just iterables
print(list(zip(list1, list2))) # [(1, 10), (2, 20), (3, 30)] {combines both}
reduzieren
- Reduziert eine Iterable auf einen einzelnen Wert.
- Reduzieren ist nützlich, wenn wir eine Iteration auf einen einzelnen Wert reduzieren möchten
from functools import reduce #functools is a module that contains higher order functions
# accumulator in simple terms is to two things together over and over
def accumulator(acc, item): # acc is accumulator, item is current item
return acc + item # 0 is the initial value of the accumulator
print(reduce(accumulator, list1, 0)) # 6 (0 + 1 + 2 + 3)
Lambda-Ausdrücke
- Anonyme einmalige Funktionen.
- Lambda-Ausdrücke sind einmalig anonyme Funktionen. Dieser Funktion ist kein Name zugeordnet.
Syntax = Lambda-Parameter: Aktion(Param)
print(list(map(lambda i: 2*i, my_list)))
print(list(filter(lambda i : i % 2 == 0, my_list)))
print(reduce(lambda acc, item: acc + item, list1))
Verständnis
- Schnelle Möglichkeiten zum Erstellen von Listen, Sätzen oder Wörterbüchern.
- Bieten Sie eine Möglichkeit, in Python eine Liste, einen Satz oder ein Diktat zu erstellen, anstatt Schleifen oder Anhänge durchzuführen
Listenverständnisse
Syntax: my_list = [Ausdruck für Parameter in iterierbarer if-Bedingung]
my_list1 = [char for char in 'hello']
print(my_list1) # ['h', 'e', 'l', 'l', 'o']
my_list2 = [num * 2 for num in range (50)]
print(my_list2) # [0, 2, 4, ..., 98]
my_list3 = [num ** 2 for num in range (10) if num % 2 == 0]
print(my_list3) # [0, 4, 16, 36,
Verständnis festlegen
-Genau wie Listenverständnisse mit geschweiften Klammern {}
Wörterbuchverständnis
a_dict = {
'a': 1,
'b': 2,
'c': 3,
'd': 4
}
my_dict = {k:v**2 for k, v in a_dict.items() if v % 2 == 0} #just give value the expression
print(my_dict) # {'b': 4, 'd': 16}
my_dict1 = {num:num**2 for num in [1,2,3]}
print(my_dict1)
Fungiert als Variablen
- Funktionen in Python können wie Variablen behandelt werden, die andere Dinge enthalten – sie können zugewiesen, weitergegeben und gelöscht werden.
def hello():
return 'hellooooo!!!!'
greet = hello # greet variable is now pointing to the function hello
del hello # delete the original function
print(greet()) # stil works because greet is pointing to the function
Funktionen höherer Ordnung
Eine Funktion höherer Ordnung ist jede Funktion, die - akzeptiert eine Funktion als Parameter, oder - gibt eine andere Funktion zurück.
def hello():
def func():
return 'heyyy'
return func # returning the function itself, not calling it
def hello1(func): #It's a function that accepts inside of its parameters another function.
func() #calling the function passed as an argument
def greet():
print('greetingsss!!!!')
hello1(greet) # passing greet function as an argument to hello function
# hello function is designed to call other functions