218 lines
4.5 KiB
Plaintext
218 lines
4.5 KiB
Plaintext
|
{
|
||
|
"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",
|
||
|
"<code>return</code> zurückgegeben wird. Die Parameterliste wird nicht eingeklammert; der aus\n",
|
||
|
"nur einem Befehl bestehende Funktionsrumpf folgt unmittelbar nach einem Doppelpunkt.\n",
|
||
|
"\n",
|
||
|
"<code>lambda < Parameterliste > : < Befehl > </code>\n",
|
||
|
"\n",
|
||
|
"anstelle von\n",
|
||
|
"\n",
|
||
|
"<code>def < Funktionsname > ( < Parameterliste > ) : <br>\n",
|
||
|
" return < Befehl > </code>"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"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
|
||
|
}
|