diff --git a/1 函数的参数.ipynb b/1 函数的参数.ipynb
new file mode 100644
index 0000000..976afc0
--- /dev/null
+++ b/1 函数的参数.ipynb	
@@ -0,0 +1,511 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 函数的参数\n",
+    "\n",
+    "## 一、基础知识"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Python 没有函数重载"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def ff( x ): return x   \n",
+    "def ff( x,y ): return x + y   # 同名函数后面的遮挡前面函数\n",
+    "\n",
+    "ff(2)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### 值传递和引用传递"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# 值传递 :字符串、数字、元组 [ 不可变 ]\n",
+    "\n",
+    "def ff(x):  x += 1   # 不改变调用值 a\n",
+    "a = 5 ; ff(a) ; a"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# 引用传递: 列表、字典 [可变]\n",
+    "\n",
+    "def ff(x): x.append(1)  # 改变调用值 a\n",
+    "a = [ 0 ] ; ff(a); a"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 二、函数参数形式\n",
+    "\n",
+    "Python函数的参数传递非常灵活,支持多种参数形式,使得函数定义和调用更加强大和灵活。"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 2.1 普通参数"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### 位置参数\n",
+    "\n",
+    "位置参数是最基本的参数形式,按照它们在函数定义中的顺序传递。"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Hello Alice, you are 25 years old\n"
+     ]
+    }
+   ],
+   "source": [
+    "def greet(name, age):  # name 和 age 是位置参数\n",
+    "    print(f\"Hello {name}, you are {age} years old\")\n",
+    "\n",
+    "# 调用方式\n",
+    "greet(\"Alice\", 25)  # 参数按照定义的顺序传入,\"Alice\" 对应 name,30 对应 age"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### 默认参数\n",
+    "\n",
+    "为某些参数设置默认值,如果调用时不提供该参数,则使用默认值。"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Hello, Bob. You are 18 years old.\n",
+      "Hello, Charlie. You are 25 years old.\n"
+     ]
+    }
+   ],
+   "source": [
+    "def greet(name, age=18):\n",
+    "    print(f\"Hello, {name}. You are {age} years old.\")\n",
+    "\n",
+    "greet(\"Bob\")          # 使用默认年龄\n",
+    "greet(\"Charlie\", 25)  # 提供具体年龄"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### 调用函数时指定参数名\n",
+    "\n",
+    "通过参数名进行传递,参数顺序可以任意调整,提高了代码的可读性。"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 50,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Charlie 20\n",
+      "Charlie 20\n",
+      "Charlie 20\n",
+      "Charlie 20\n"
+     ]
+    }
+   ],
+   "source": [
+    "def greet( name,age ): print( name,age)    \n",
+    "\n",
+    "greet( name = 'Charlie', age=20 )  # 命名传递参数,更清楚\n",
+    "greet( age = 20,name = 'Charlie' )  # 顺序可以改变\n",
+    "greet( 'Charlie',age = 20 )   # 混合使用,普通调用放前面,命名调用放后面\n",
+    "\n",
+    "name,age = 'Charlie',20  \n",
+    "greet( name = name, age = age ) # 形参、实参数同名的情况"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 2.2 可变参数"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### 可变位置参数 \n",
+    "- 使用星号(*)定义可变数量的位置参数,这些参数被存储在一个元组中。"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "6\n",
+      "15\n"
+     ]
+    }
+   ],
+   "source": [
+    "def sum_numbers(*args):\n",
+    "    return sum(args)\n",
+    "\n",
+    "# 调用方式\n",
+    "print(sum_numbers(1, 2, 3))       # 输出: 6\n",
+    "print(sum_numbers(1, 2, 3, 4, 5)) # 输出: 15"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### 关键字参数(命名参数、字典参数)\n",
+    "\n",
+    "- 放在可变位置参数后面 \n",
+    "- 调用的时候,必须使用名字赋值形式"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 51,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(1, (2, 3), 2)"
+      ]
+     },
+     "execution_count": 51,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "def ff(a,*b,c): return a,b,c\n",
+    "\n",
+    "ff( 1,c = 2 )  \n",
+    "ff( 1,2,c = 2 )\n",
+    "ff( 1,2,3,c = 2 ) "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# 没有可变参数,也要用 * 占位\n",
+    "\n",
+    "def ff(a,*,b): return a,b\n",
+    "ff(1,b=2)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 52,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 () 0\n",
+      "1 2\n",
+      "1 3\n"
+     ]
+    },
+    {
+     "data": {
+      "text/plain": [
+       "(None, None)"
+      ]
+     },
+     "execution_count": 52,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# 有默认值的情况\n",
+    "\n",
+    "def ff( a,*b,c = 0 ): print(a,b,c)  \n",
+    "ff(1)\n",
+    "\n",
+    "def ff( a = 1,*, b = 2 ): print(a,b)     \n",
+    "ff(),ff( b = 3 )    # 前面是带默认值的位置参数"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 53,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Hello Alice, you are 25 years old\n"
+     ]
+    }
+   ],
+   "source": [
+    "# 函数以空*开头,强制函数用关键字参数,可提升代码可读性\n",
+    "\n",
+    "def greet(*, name, age):    # * 之后的参数只能用关键字参数\n",
+    "    print(f\"Hello {name}, you are {age} years old\")\n",
+    "\n",
+    "# 正确调用\n",
+    "greet(name=\"Alice\", age=25)\n",
+    "\n",
+    "# 错误调用\n",
+    "# greet(\"Alice\", 25)    # 无 关键字命名 错误"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### 可变关键字参数\n",
+    "\n",
+    "使用两个星号(**)定义可变数量的关键字参数。这些参数被存储在一个字典中。"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "name: Eve\n",
+      "age: 28\n",
+      "city: London\n"
+     ]
+    }
+   ],
+   "source": [
+    "def print_info(**kwargs):\n",
+    "    for key, value in kwargs.items():\n",
+    "        print(f\"{key}: {value}\")\n",
+    "\n",
+    "# 调用方式\n",
+    "print_info( name=\"Eve\", age=28, city=\"London\" )"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### 解包可变参数\n",
+    "\n",
+    "在函数调用时,可以使用星号(*)或两个星号(**)来解包列表、元组或字典,将其中的元素或键值对作为参数传递给函数。"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def func(a, b, *args, **kwargs):\n",
+    "    print(a, b, args)\n",
+    "    for key, value in kwargs.items():\n",
+    "        print(key, value)\n",
+    "\n",
+    "args = (3, 4)  # 或者 [\"Alice\", 25, \"Beijing\"] 其它序列容器\n",
+    "kwargs = {'x': 5, 'y': 6}        \n",
+    "func(1, 2, *args, **kwargs)  "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 2.3 混合使用各种参数"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 56,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "1 () 2 {}\n",
+      "1 () 2 {'d': 3}\n",
+      "1 () 2 {'d': 3, 'e': 4}\n",
+      "1 () 2 {'d': 3, 'e': 4}\n",
+      "1 () 2 {'d': 3, 'e': 4}\n"
+     ]
+    }
+   ],
+   "source": [
+    "# 顺序:普通参数、可变位置参数、命名参数、可变关键字参数\n",
+    "# 可变位置参数后面,命名参数选取剩下的就是可变关键字参数\n",
+    "\n",
+    "def ff( a,*b,c,**d ): print( a,b,c,d )\n",
+    "\n",
+    "ff( 1,c=2 )\n",
+    "ff( 1,c=2,d=3 )\n",
+    "ff( 1,c=2,d=3,e=4 )\n",
+    "ff( 1,d=3,e=4,c=2 )\n",
+    "ff( 1,d=3,c=2,e=4 )  # 可推测其参数确定机制"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 55,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "普通参数 name : 1\n",
+      "普通参数 age : 2\n",
+      "可变参数 args : (3,)\n",
+      "命名参数 department : math\n",
+      "字典参数 kwargs : {}\n"
+     ]
+    }
+   ],
+   "source": [
+    "def ff( name , age ='20', *args, department = 'cs', **kwargs ): \n",
+    "    '''\n",
+    "        name 是必需的位置参数。\n",
+    "        age 是带有默认值的位置参数。\n",
+    "        *args 收集额外的位置参数。\n",
+    "        **kwargs 收集额外的关键字参数。\n",
+    "    '''    \n",
+    "    print('普通参数 name :', name )\n",
+    "    print('普通参数 age :', age )\n",
+    "    print('可变参数 args :', args )\n",
+    "    print('命名参数 department :', department )\n",
+    "    print('字典参数 kwargs :', kwargs )\n",
+    "\n",
+    "# ff()\n",
+    "# ff(1)\n",
+    "# ff(1,2)\n",
+    "# ff(1,2,3)\n",
+    "# ff(1,2,3,4)\n",
+    "# ff(1,2,3,department='math')\n",
+    "# ff(1,2,3,u1='math')\n",
+    "# ff(1,2,3,4,5,u1='tsg',department='cmu',u2='pku' )"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# 基础代码中常用( *args,**kwargs )参数表来抽象表示一般函数的参数\n",
+    "\n",
+    "def ff( *args,**kwargs ): \n",
+    "    pass"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 总结\n",
+    "\n",
+    "#### 参数顺序规则\n",
+    "<code>\n",
+    "def function(\n",
+    "    位置参数,           # 普通参数\n",
+    "    默认参数 = '默认值',     # 默认参数\n",
+    "    *args,            # 可变位置参数    \n",
+    "    关键字参数,       # 普通关键字参数\n",
+    "    **kwargs          # 可变关键字参数\n",
+    "): pass\n",
+    "</code>    \n",
+    "\n",
+    "- 可以有默认值:普通位置参数、 关键字参数"
+   ]
+  }
+ ],
+ "metadata": {
+  "hide_input": false,
+  "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.8.3"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}