From fc472a1e68629decb0558ead6200b6edcb505ffb Mon Sep 17 00:00:00 2001 From: 7Wate Date: Thu, 10 Feb 2022 17:58:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=87=BD=E6=95=B0=E3=80=81=E5=A4=8D=E5=90=88?= =?UTF-8?q?=E8=AF=AD=E5=8F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/开发/Python/函数.md | 140 ++++++++++++++++++ .../Python/{流程控制语句.md => 复合语句.md} | 10 +- ...数、字符串和常用数据结构.md => 数据结构.md} | 118 +-------------- .../Python/{面对对象编程.md => 面对对象.md} | 4 +- 4 files changed, 150 insertions(+), 122 deletions(-) create mode 100644 docs/开发/Python/函数.md rename docs/开发/Python/{流程控制语句.md => 复合语句.md} (97%) rename docs/开发/Python/{函数、字符串和常用数据结构.md => 数据结构.md} (79%) rename docs/开发/Python/{面对对象编程.md => 面对对象.md} (99%) diff --git a/docs/开发/Python/函数.md b/docs/开发/Python/函数.md new file mode 100644 index 00000000..838f252d --- /dev/null +++ b/docs/开发/Python/函数.md @@ -0,0 +1,140 @@ +--- +id: 函数定义 +title: 函数定义 +sidebar_position: 2.5 +data: 2022年2月10日 +--- + +通过白盒/黑盒封装多行代码的实现,一般情况下拥有输入和输出,用来**简化代码**、**重复调用**和**模块化编程**。 + +在 Python 中可以使用`def`关键字来定义函数,和变量一样每个函数也有一个响亮的名字,而且命名规则跟变量的命名规则是一致的。函数内的第一条语句是字符串时,该字符串就是**文档字符串**,也称为 docstring。 + +```python +def fib(n): + """输出限定数值内的斐波那契数列函数""" + a, b = 0, 1 + while a < n: + print(a, end=' ') + a, b = b, a+b + print() +``` + +### 默认值参数 + +在 Python 中,函数的参数可以有默认值,也支持使用可变参数,所以 Python 并不需要像其他语言一样支持函数的重载,因为我们在定义一个函数的时候可以让它有多种不同的使用方式。 + +```python +def add(a=0, b=0, c=0): + """三个数相加""" + return a + b + c +add(1,2) +# 3 +``` + +### 键值参数 + +`kwarg=value` 形式的 关键字参数 也可以用于调用函数。函数示例如下: + +该函数接受一个必选参数(`voltage`)和三个可选参数(`state`, `action` 和 `type`)。 + +```python +def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'): + print("-- This parrot wouldn't", action, end=' ') + print("if you put", voltage, "volts through it.") + print("-- Lovely plumage, the", type) + print("-- It's", state, "!") + +parrot("halo",type="test") + +# -- This parrot wouldn't voom if you put halo volts through it. +# -- Lovely plumage, the test +# -- It's a stiff ! +``` + +### 特殊参数 + +#### 可变参数 * + +在参数名前面的 * 表示 args 是一个可变参数,可以输入多个参数。 + +```python +def add2(*args): + total = 0 + for val in args: + total += val + print(total) + +add2(1,2,3) +# 6 +``` + +#### 键值参数 ** + +在参数名前面的 ** 表示 args 是一个可变参数,可以输入键值对。 + +```python +def add2(**arg): + print(arg) + +add2(name="halo") +# {'name': 'halo'} +``` + +#### 限位置参数 / + +`/`必须放在形参后面表示限制位置参数,实参必须按照形参位置输入。 + +```python +def pos_only_arg(arg, /): + print(arg) +``` + +#### 限关键字参数 * + +`*`必须放在形参前面表示限关键字参数,实参必须按键值参数输入。 + +```python +def kwd_only_arg(*, arg): + print(arg) +``` + +特殊参数组合 + +```python +def combined_example(pos_only, /, standard, *, kwd_only): + print(pos_only, standard, kwd_only) + +""" +运行示例 +""" +>>> combined_example(1, 2, 3) +Traceback (most recent call last): + File "", line 1, in +TypeError: combined_example() takes 2 positional arguments but 3 were given + +>>> combined_example(1, 2, kwd_only=3) +1 2 3 + +>>> combined_example(1, standard=2, kwd_only=3) +1 2 3 + +>>> combined_example(pos_only=1, standard=2, kwd_only=3) +Traceback (most recent call last): + File "", line 1, in +TypeError: combined_example() got some positional-only arguments passed as keyword arguments: 'pos_only' +``` + +### Lambda 表达式 + +lambda 关键字用于创建小巧的匿名函数。lambda a, b: a+b 函数返回两个参数的和。Lambda 函数可用于任何需要函数对象的地方。在语法上,匿名函数只能是单个表达式。在语义上,它只是常规函数定义的语法糖。与嵌套函数定义一样,lambda 函数可以引用包含作用域中的变量: + +```python +>>> def make_incrementor(n): +... return lambda x: x + n +... +>>> f = make_incrementor(42) +>>> f(0) +42 +>>> f(1) +43 +``` \ No newline at end of file diff --git a/docs/开发/Python/流程控制语句.md b/docs/开发/Python/复合语句.md similarity index 97% rename from docs/开发/Python/流程控制语句.md rename to docs/开发/Python/复合语句.md index 39f1253b..a020bcd6 100644 --- a/docs/开发/Python/流程控制语句.md +++ b/docs/开发/Python/复合语句.md @@ -1,11 +1,11 @@ --- -id: 流程控制语句 -title: 流程控制语句 +id: 复合语句 +title: 复合语句 sidebar_position: 2 data: 2022年2月9日 --- -## 判断语句 +## 判断 ### if @@ -58,7 +58,7 @@ case 401 | 403 | 404: -## 循环语句 +## 循环 ### for @@ -149,7 +149,7 @@ for n in range(2, 10): """ ``` -## 其他语句 +## 其他 ### pass diff --git a/docs/开发/Python/函数、字符串和常用数据结构.md b/docs/开发/Python/数据结构.md similarity index 79% rename from docs/开发/Python/函数、字符串和常用数据结构.md rename to docs/开发/Python/数据结构.md index 489c8418..01363848 100644 --- a/docs/开发/Python/函数、字符串和常用数据结构.md +++ b/docs/开发/Python/数据结构.md @@ -1,124 +1,12 @@ --- -id: 函数、字符串和常用数据结构 -title: 函数、字符串和常用数据结构 +id: 数据结构 +title: 数据结构 sidebar_position: 3 data: 2022年1月27日 --- -## 函数 -通过白盒/黑盒封装多行代码的实现,一般情况下拥有输入和输出,用来**简化代码**、**重复调用**和**模块化编程**。 - -### 函数定义 - -在 Python 中可以使用`def`关键字来定义函数,和变量一样每个函数也有一个响亮的名字,而且命名规则跟变量的命名规则是一致的。在函数名后面的圆括号中可以放置传递给函数的参数,这一点和数学上的函数非常相似,程序中函数的参数就相当于是数学上说的函数的自变量,而函数执行完成后我们可以通过`return`关键字来返回一个值,这相当于数学上说的函数的因变量。 - -### 函数的参数 - -在 Python 中,函数的参数可以有默认值,也支持使用可变参数,所以 Python 并不需要像其他语言一样支持[函数的重载](https://zh.wikipedia.org/wiki/函数重载),因为我们在定义一个函数的时候可以让它有多种不同的使用方式。 - -```python -from random import randint - - -def roll_dice(n=2): - """摇色子""" - total = 0 - for _ in range(n): - total += randint(1, 6) - return total - - -def add(a=0, b=0, c=0): - """三个数相加""" - return a + b + c - -# 在参数名前面的*表示args是一个可变参数 -def add2(*args): - total = 0 - for val in args: - total += val - return total - - -# 如果没有指定参数那么使用默认值摇两颗色子 -print(roll_dice()) -# 摇三颗色子 -print(roll_dice(3)) -print(add()) -print(add(1)) -print(add(1, 2)) -print(add(1, 2, 3)) -# 传递参数时可以不按照设定的顺序进行传递 -print(add(c=50, a=100, b=200)) - -# 在调用add函数时可以传入0个或多个参数 -print(add2()) -print(add2(1)) -print(add2(1, 2)) -print(add2(1, 2, 3)) -print(add2(1, 3, 5, 7, 9)) -``` - -### 用模块管理函数 - -由于 Python 没有函数重载的概念,那么后面的定义会覆盖之前的定义,也就意味着两个函数同名函数实际上只有一个是存在的。 - -```python -def foo(): - print('hello, world!') - -def foo(): - print('goodbye, world!') - -下面的代码会输出什么呢? - -foo() -``` - -Python中每个文件就代表了一个模块(module),我们在不同的模块中可以有同名的函数,在使用函数的时候我们通过`import`关键字导入指定的模块就可以区分到底要使用的是哪个模块中的`foo`函数,代码如下所示。 - -`module1.py` - -```python -def foo(): - print('hello, world!') -``` - -`module2.py` - -```python -def foo(): - print('goodbye, world!') -``` - -`test.py` - -```python -from module1 import foo - -# 输出hello, world! -foo() - -from module2 import foo - -# 输出goodbye, world! -foo() -``` - -也可以按照如下所示的方式来区分到底要使用哪一个`foo`函数。 - -```python -import module1 as m1 -import module2 as m2 - -m1.foo() -m2.foo() -``` - -## 字符串和常用数据结构 - -### 字符串 +## 字符串 所谓**字符串**,就是由零个或多个字符组成的有限序列。在Python程序中,如果我们把单个或多个字符用单引号或者双引号包围起来,就可以表示一个字符串。 diff --git a/docs/开发/Python/面对对象编程.md b/docs/开发/Python/面对对象.md similarity index 99% rename from docs/开发/Python/面对对象编程.md rename to docs/开发/Python/面对对象.md index 3ad1f621..88319503 100644 --- a/docs/开发/Python/面对对象编程.md +++ b/docs/开发/Python/面对对象.md @@ -1,6 +1,6 @@ --- -id: 面对对象编程 -title: 面对对象编程 +id: 面对对象 +title: 面对对象 sidebar_position: 4 data: 2022年1月28日 ---