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.py
my_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 Tupel
def 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 Dictionary
def concatenate(**kwargs):
result = ""
for value in kwargs.values():
result += value
return result
concatenate(a="Hallo", b=" das ", c="ist", d=" ein ", e="Test")
*args
**kwargs
def my_function(a, b, *args, **kwargs):
pass
return
def 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.py
def greeting(name):
return 'Hello ' + name
greeting(123)
#> TypeError: can only concatenate str (not "int") to str
typehints_docstring.py
def 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.py
a_name: str
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.py
def my_function(input):
output = input * 2
return output
print("Modul wurde geladen!")
main_import_all.py
import my_module_without_main
# Importiert den gesamten Inhalt des Moduls
# Aufruf über Modulnamen
my_module_without_main.my_function(3)
#> 6
main_import_func.py
from my_module_without_main import my_function
# Importiert nur die genannte Funktion
my_function(3) # Direkter Aufruf
#> 6
my_module_without_main.py
def my_function(input):
output = input * 2
return output
print(f"Ich stehe in der Datei: {__name__}")
main.py
import 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_main
python 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.py
def 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.py
main.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)