{ "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 }