{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def calc_angle_area(base, height): # 1\n", " area = (base * height) / 2 # 2\n", " return area # 3" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "7.5" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "calc_angle_area(3, 5)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "78.0" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "calc_angle_area(12, 13)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "250.0" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "calc_angle_area(20, 25)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } }, "source": [ "# 创建函数" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4\n" ] } ], "source": [ "def square(x):\n", " return x ** 2\n", "\n", "\n", "print(square(2))" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } }, "source": [ "# 作用域" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "n is: 1\n", "n is: 2\n", "10\n" ] } ], "source": [ "n = 10\n", "s = [print(f\"n is: {n}\") for n in range(1, 3)]\n", "print(n)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a is: 10\n" ] } ], "source": [ "def scope_invoke():\n", " a = 10\n", " print(\"a is:\", a)\n", "\n", "scope_invoke()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "# error here\n", "# print(a)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a is: 10\n", "10\n" ] } ], "source": [ "def scope_invoke():\n", " global a\n", " a = 10\n", " print(\"a is:\", a)\n", "\n", "scope_invoke()\n", "print(a)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } }, "source": [ "# 参数" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } }, "source": [ "## 位置参数" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "def pow(x, y):\n", " return x ** y" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "def pow(a, b):\n", " return a ** b\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "8\n" ] } ], "source": [ "res = pow(2, 3)\n", "print(res)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "## 默认参数" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "def pow(x, y=2):\n", " return x ** y" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4\n" ] } ], "source": [ "print(pow(2))" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "16\n" ] } ], "source": [ "print(pow(4, 2))" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1296\n" ] } ], "source": [ "print(pow(6, 4))" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "## 可变参数" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "def multiply(*args):\n", " total = 1\n", " for n in args:\n", " if n == 0:\n", " return 0\n", " total *= n\n", " return total\n", "\n" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "multiply(0, 1, 3, 4, 5)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "384" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "multiply(2, 4, 6, 8)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "12.07481994068" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "multiply(3.1415, 2.71828, 1.414)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "def multiply_with_print(a, b, *args):\n", " if a == 0 or b == 0:\n", " return 0\n", "\n", " total = a * b\n", " print(f\"args:{args}, type: {type(args)}\")\n", " if args:\n", " for n in args:\n", " total *= n\n", " return total\n" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "args:(6, 8), type: \n" ] }, { "data": { "text/plain": [ "384" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "multiply_with_print(2, 4, 6, 8)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "head: 1\n", "middle: [2, 3, 4]\n", "tail: 5\n" ] } ], "source": [ "head, *middle, tail = [1, 2, 3, 4, 5]\n", "print(f\"head: {head}\")\n", "print(f\"middle: {middle}\")\n", "print(f\"tail: {tail}\")\n" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "## 关键字参数" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "9" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def pow(x, y=2):\n", " return x ** y\n", "\n", "pow(x=3, y=2)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "kwargs: {'x': 3, 'y': 2, 'z': 4}, type: \n" ] }, { "data": { "text/plain": [ "9" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "kws = dict(x=3, y=2, z=4)\n", "\n", "def pow(**kwargs):\n", " print(f\"kwargs: {kwargs}, type: {type(kwargs)}\")\n", " x = kwargs.get(\"x\", 0)\n", " y = kwargs.get(\"y\", 2)\n", "\n", " return x ** y\n", "\n", "\n", "pow(**kws)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "# error here\n", "# pow(x=2, 3)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "ops = {\n", " \"add\": lambda x, y: x + y,\n", " \"sub\": lambda x, y: x - y,\n", " \"mul\": lambda x, y: x * y,\n", " \"div\": lambda x, y: x / y,\n", "}\n", "\n", "def operate(x, y, *, op):\n", " if op not in ops:\n", " raise ValueError(f\"{op} operator is not supported\")\n", " return ops[op](x, y)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "5" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "operate(2, 3, op=\"add\")" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "-1" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "operate(2, 3, op=\"sub\")" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "6" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "operate(2, 3, op=\"mul\")" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "0.6666666666666666" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "operate(2, 3, op=\"div\")" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "# error here\n", "# operate(2, 3, \"mod\")" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false, "pycharm": { "name": "#%% md\n" } }, "source": [ "## 返回值" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1 2 3\n" ] } ], "source": [ "\n", "def multiple_return():\n", " return 1, 2, 3\n", "\n", "\n", "head, middle, tail = multiple_return()\n", "print(head, middle, tail)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "True\n" ] } ], "source": [ "result = multiple_return()\n", "print(isinstance(result, tuple))" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1 [2, 3]\n" ] } ], "source": [ "head, *rest = multiple_return()\n", "print(head, rest)" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "I have no return value\n", "None\n" ] } ], "source": [ "def no_return():\n", " print('I have no return value')\n", "\n", "ret = no_return()\n", "print(ret)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false, "pycharm": { "name": "#%%\n" } }, "source": [ "## Lambda 表达式与函数式编程" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "def operate(x, y, *, op):\n", " return op(x, y)\n" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "operate(2, 3, op=lambda x,y: x + y)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-1" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "operate(2, 3, op=lambda x,y: x - y)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "6" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "operate(2, 3, op=lambda x,y: x * y)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.6666666666666666" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "operate(2, 3, op=lambda x,y: x / y)" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "operate(2, 3, op=lambda x,y: x // y)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[5, -1, 6, 0.6666666666666666]\n" ] } ], "source": [ "# map\n", "\n", "results = list(map(lambda x, y, func: func(x, y), [2]*4, [3]*4, [lambda x, y: x + y, lambda x, y: x - y, lambda x, y: x * y, lambda x, y: x / y]))\n", "print(results)" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2, 4, 6, 8, 10]\n" ] } ], "source": [ "# filter\n", "\n", "evens = list(filter(lambda x: x % 2 == 0, range(1, 11)))\n", "print(evens)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1, 3, 5, 7, 9]\n" ] } ], "source": [ "odds = list(filter(lambda x: x % 2 != 0, range(1, 11)))\n", "print(odds)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.0" } }, "nbformat": 4, "nbformat_minor": 0 }