{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# reduce" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1, 2, 3, 4, 5]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from functools import reduce\n", "\n", "numbers = list(range(1, 6))\n", "numbers" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "15" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "int(reduce(lambda x, y: x + y, numbers))" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "120" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "int(reduce(lambda x, y: x * y, numbers))" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "15" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def accumulate(sequence):\n", " result = sequence[0]\n", " for index, _ in enumerate(sequence[1:], start=1):\n", " right = sequence[index]\n", " result += right\n", "\n", " return result\n", "\n", "accumulate(numbers)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "25" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "int(reduce(lambda x, y: x+y, numbers, 10))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# partial" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "from functools import partial\n", "from math import log\n", "\n", "def custom_log(x, base):\n", " return log(x, base)\n", "\n", "log2 = partial(custom_log, base=2)\n", "log10 = partial(custom_log, base=10)" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.0" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "log2(4)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.0" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "log10(100)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.0" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "log2(9, base=3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# wraps" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### without wraps function" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Monitoring request...\n", "request https://sspai.com using GET method...\n" ] } ], "source": [ "def monitor(func):\n", " print(f\"Monitoring {func.__name__}...\") \n", " def wrapper(*args, **kwargs):\n", " return func(*args, **kwargs)\n", " return wrapper\n", "\n", "@monitor\n", "def request(url, method=\"GET\"):\n", " \"\"\"Request from target url\n", " :param url: string, the target url.\n", " :param method: string, the request method, default is GET.\n", " \"\"\"\n", " print(f\"request {url} using {method} method...\")\n", "\n", "request(\"https://sspai.com\")\n" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ".wrapper(*args, **kwargs)>" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "request" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "wrapper\n", "None\n" ] } ], "source": [ "print(request.__name__)\n", "print(request.__doc__)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### with wraps function" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Monitoring request...\n", "request https://sspai.com using GET method...\n" ] } ], "source": [ "from functools import wraps\n", "\n", "def monitor(func):\n", " print(f\"Monitoring {func.__name__}...\")\n", "\n", " @wraps(func)\n", " def wrapper(*args, **kwargs):\n", " return func(*args, **kwargs)\n", " return wrapper\n", "\n", "@monitor\n", "def request(url, method=\"GET\"):\n", " \"\"\"Request from target url\n", " :param url: string, the target url.\n", " :param method: string, the request method, default is GET.\n", " \"\"\"\n", " print(f\"request {url} using {method} method...\")\n", "\n", "request(\"https://sspai.com\")" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "request" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "request\n", "Request from target url\n", " :param url: string, the target url.\n", " :param method: string, the request method, default is GET.\n", " \n" ] } ], "source": [ "print(request.__name__)\n", "print(request.__doc__)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3.9.0 ('pandas-startup')", "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" }, "orig_nbformat": 4, "vscode": { "interpreter": { "hash": "13977d4cc82dee5f9d9535ceb495bd0ab12a43c33c664e5f0d53c24cf634b67f" } } }, "nbformat": 4, "nbformat_minor": 2 }