Tupel auch mehrere Wertex) ausgeführtguten Funktionen"""def → Definition einer Funktionreturn-Statement bzw. Type Hints ersichtlich# Beispiel: eine Funktion die das übergebene Argument um 1 erhöht
# arg1 stellt hierbei das Argument dar, das übergeben wird
def function_name(arg1):
print(str(arg1) + " plus 1 is: ") # Innerhalb der Funktion
# können beliebige Aktionen ausgeführt werden
return (arg1) + 1 # Das return-Kennwort gibt an, was die Funktion,
# wenn die Aufgerufen wird zurückgeben soll. Dies ist optional.
# Beispiel: eine Funktion die zwei beliebige Zahlen addiert
# Die beiden Zahlen werden als Argumente übergeben
def add_two_numbers(x: float, y: float) -> float:
return x + y # Diese Funktion gibt einen Wert zurück
# und zwar die Summe der beiden Zahlen
add_two_numbers(1,2) # Gibt 3 zurück
z = add_two_numbers(2,3) # Hier wird die Rückgabe 5
# direkt in einer neuen Variable z gespeichert
def describe_pet(animal_type, pet_name):
"""
Display information about a pet.
"""
print(f"I have a {animal_type}.")
print(f"My {animal_type}'s name is {pet_name.title()}.")
describe_pet("hamster", "harry")
Geben Sie eine Liste von Personen my_persons an, schreiben Sie eine Funktion look_for_person, die die Position des ersten Auftretens der Person in der Liste herausfindet und diese ausgibt.
Die Liste persons und der String person_to_look_for sind die Parameter der Funktion.
my_persons = ["Julian", "Andreas", "Philipp", "Manuel"]
my_person = "Andreas"
def look_for_person(persons, person_to_look_for):
position = 0
# Lösung hier fortsetzen
person_lookup.pymy_persons = ["Tim", "Julian", "Andreas", "Philipp", "Manuel", "Jim"]
look_for_person(persons=my_persons, person_to_look_for="Tim")
* bzw. **list_unpacking.py*args können beliebig viele positionale Argumente übergeben werden → Asterisk (*) vor dem Argumentsnamen → als Tupeldef look_for_person(*args, person_to_look_for):
for person in args:
if person == person_to_look_for:
return args.index(person)
look_for_person("Tim", "Julian", "Andreas", "Philipp", "Manuel", person_to_look_for="Tim")
**kwargs können beliebig viele Schlüsselwortargumente übergeben werden → 2 Asterisk (**) vor dem Argumentsnamen → als Dictionarydef concatenate(**kwargs):
result = ""
for value in kwargs.values():
result += value
return result
concatenate(a="Hallo", b=" das ", c="ist", d=" ein ", e="Test")
*args**kwargsdef my_function(a, b, *args, **kwargs):
pass
returndef get_formatted_name(first_name, last_name):
"""
Return a full name, neatly formatted.
"""
full_name = first_name + " " + last_name
return full_name.title()
person_1 = get_formatted_name("julian", "huber")
print(person_1)
#> Julian Huber
typehints_problem.pydef greeting(name):
return "Hello " + name
greeting(123)
#> TypeError: can only concatenate str (not "int") to str
typehints_docstring.pydef greeting(name):
"""
This function can print a greeting to a name
Parameters
----------
name : string
the name of the person to greet
Returns
-------
string
a greeting containing the name
"""
return "Hello " + name
typehints.pya_name: str = "Julian" # Variable vom Typ String
def greeting(name: str) -> str:
return "Hello " + name
a_name = 42
greeting(a_name)
#> TypeError: can only concatenate str (not "int") to str
math, random, os, datetime, etc.import-Statement und Modulenamen:import math
import os
print(math.pi)
*.py)*.py-Dateien kann als Modul importiert werden → hierbei müssen einige Aspekte beachtet werdenmy_module_without_main.pydef my_function(input):
output = input * 2
return output
print("Modul wurde geladen!")
main_import_all.pyimport my_module_without_main
# Importiert den gesamten Inhalt des Moduls
# Aufruf über Modulnamen
my_module_without_main.my_function(3)
#> 6
main_import_func.pyfrom my_module_without_main import my_function
# Importiert nur die genannte Funktion
my_function(3) # Direkter Aufruf
#> 6
my_module_without_main.pydef my_function(input):
output = input * 2
return output
print(f"Ich stehe in der Datei: {__name__}")
main.pyimport my_module_without_main # Importiert den gesamten Inhalt der
my_module_without_main ausgeführtmy_function(...) wird definiertprint() Befehl wird ebenfalls ausgeführt
python main.py:Ich stehe in der Datei: my_module_without_mainpython my_module_without_main.py:Ich stehe in der Datei: __main____name__ nimmt immer den Wert __main__ an, wenn die Datei selbst direkt ausgeführt wird__name__=="__main__"my_module_with_main.py selbst ausgeführt gilt:__name__ == "__main__"
#> True
__name__ == "__main__"
#> False
my_module_with_main.pydef my_function(input):
output = input * 2
return output
if __name__ == "__main__":
print("Datei wurde direkt aufgerufen und die Main wird ausgeführt")
else:
print("Datei wurde als Modul aufgerufen")
print(f"Ich stehe in der Datei: {__name__}")
main.pymain.py → für jeden Programmierer direkt klarif-Statement verpackt werden:if __name__ == "__main__":
...
if-Statements (wie oben):if __name__ == "__main__":
...
verpacken → wird nur beim Testen ausgeführtsys.path abgefragt werden → List mit Pfaden als Stringsimport sys
sys.path
#> ['', 'C:\\Users\\john\\Documents\\Python\\doc', 'C:\\Python36\\Lib\\idlelib',
#> 'C:\\Python36\\python36.zip', 'C:\\Python36\\DLLs', 'C:\\Python36\\lib',
#> 'C:\\Python36', 'C:\\Python36\\lib\\site-packages']
sys.path.append(r"C:\Users\john")
__name___single_leading_underscore bei Attributen (Variablen) und Methoden (Funktionen in Klassen), die nur für den internen Gebrauch bestimmt sind,__double_leading_underscore bei Attributen (Variablen) und Methoden (Funktionen in Klassen), die nur für den internen Gebrauch bestimmt sind__name__ Variablen und Methoden, die eigentlich nur für den internen Gebrauch der Programmiersprache Python gedacht sinddir(int)# :writing_hand: Aufgabe - Bündeln Sie die Funktionalität der letzten Hausübung in den folgenden Funktionen mit Docstring und Type Hints: - `list_to_float(data)` - `mean(data)` - `moving_average(data, window_size)` - `mse(data1, data2)` ### Musterlösung - [`glaettung_beschleunigung_funktionen.py`](./Examples/Funktionen_und_Module/Data_Smoothing/glaettung_beschleunigung_funktionen.py) - Implementierung und Anwendung aller Funktionen - Nur sehr rudimentäre Docstrings
# :writing_hand: Aufgabe - Verpacken Sie die zuvor angelegten Funktionen aus der letzten Hausaufgabe in ein Modul und rufen Sie die Funktionen des Moduls aus einem Hauptprogramm heraus auf. ### Musterlösung - [`glaettung_beschleunigung_modul.py`](./Examples/Funktionen_und_Module/Data_Smoothing/glaettung_beschleunigung_modul.py) - Ausgangslage: [`glaettung_beschleunigung_funktionen.py`](./Examples/Funktionen_und_Module/Data_Smoothing/glaettung_beschleunigung_funktionen.py) - Test: [`glaettung_beschleunigung_modul_test.py`](./Examples/Funktionen_und_Module/Data_Smoothing/glaettung_beschleunigung_modul_test.py)