Files
sspai-100-hours-series-python/code/newsletter/N3/functools.ipynb

410 lines
7.5 KiB
Plaintext

{
"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": [
"<function __main__.monitor.<locals>.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": [
"<function __main__.request(url, method='GET')>"
]
},
"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
}