{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Software Entwicklung \n",
"\n",
"## Kapitel 4: Funktionen"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### 4.8 Funktionen als Datentyp \n",
"\n",
"In Python werden Funktionen als *first class object* behandelt, d.h. sie sind ein\n",
"vollwertiger Datentyp, dessen Werte Variablen zugewiesen oder als Parameter übergeben\n",
"werden können. "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"def quadrat(x):\n",
" return x*x\n",
"\n",
"variable = quadrat\n",
"print(type(variable))"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Mit einer Variablen, die als Wert eine Funktion enthält, verfügt man quasi über einen\n",
"zweiten Alias-Namen für die Funktion. Der Aufruf der Funktion ist auch mittels dieses Alias möglich."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"def quadrat(x):\n",
" return x*x\n",
"\n",
"zweiter_name = quadrat\n",
"print(zweiter_name(5))"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Eine interessante Anwendung ist die Übergabe von Funktionen als Parameter an andere Funktionen."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"def drucke_1():\n",
" print(\"1\")\n",
"\n",
"def drucke_2():\n",
" print(\"2\")\n",
"\n",
"def tue_das_eine_und_x_mal_das_andere(f1, x, f2):\n",
" f1()\n",
" for _ in range(x):\n",
" f2()\n",
" \n",
"tue_das_eine_und_x_mal_das_andere(drucke_1, 4, drucke_2)"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"### 4.9 Lambda-Funktionen\n",
"\n",
"Kurze Funktionen können als sog. *Lambda-Funktionen* ohne Funktionsnamen\n",
"definiert werden. *Lambda-Funktionen* bestehen nur aus einer einzigen Operation, deren Ergebnis ohne\n",
"return
zurückgegeben wird. Die Parameterliste wird nicht eingeklammert; der aus\n",
"nur einem Befehl bestehende Funktionsrumpf folgt unmittelbar nach einem Doppelpunkt.\n",
"\n",
"lambda < Parameterliste > : < Befehl >
\n",
"\n",
"anstelle von\n",
"\n",
"def < Funktionsname > ( < Parameterliste > ) :
\n",
" return < Befehl >
"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"pycharm": {
"name": "#%%\n"
},
"slideshow": {
"slide_type": "subslide"
}
},
"outputs": [],
"source": [
"quadrat = lambda x : x*x\n",
"\n",
"print(quadrat(3))"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"Diese kompakte Form der Funktionsdefinition ist insbesondere bei der Übergabe der\n",
"Funktion als Parameter beliebt."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"pycharm": {
"is_executing": false,
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"def foreach(f, *args):\n",
" result = []\n",
" for element in args:\n",
" result.append(f(element))\n",
" return result\n",
"\n",
"foreach(lambda x: x*x+1, 1, 2, 3)"
]
}
],
"metadata": {
"celltoolbar": "Slideshow",
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.9"
},
"pycharm": {
"stem_cell": {
"cell_type": "raw",
"metadata": {
"collapsed": false
},
"source": []
}
}
},
"nbformat": 4,
"nbformat_minor": 1
}