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