From 6eb2c180afeb337f8019553931b9b37a6844bb72 Mon Sep 17 00:00:00 2001 From: 7Wate Date: Sat, 19 Nov 2022 21:18:21 +0800 Subject: [PATCH] =?UTF-8?q?Python=EF=BC=9A=E6=8E=A7=E5=88=B6=E8=AF=AD?= =?UTF-8?q?=E5=8F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Python/入门/函数方法.md | 2 +- .../Python/入门/控制语句.md | 106 ++++++++++++++---- .../Python/入门/数据结构.md | 2 +- wiki/programming-language/Python/入门/简介.md | 2 +- .../Python/入门/面对对象.md | 2 +- 5 files changed, 86 insertions(+), 28 deletions(-) diff --git a/wiki/programming-language/Python/入门/函数方法.md b/wiki/programming-language/Python/入门/函数方法.md index bb559ae4..67eb72f5 100644 --- a/wiki/programming-language/Python/入门/函数方法.md +++ b/wiki/programming-language/Python/入门/函数方法.md @@ -1,7 +1,7 @@ --- id: 函数方法 title: 函数方法 -sidebar_position: 3 +sidebar_position: 5 data: 2022年2月10日 --- diff --git a/wiki/programming-language/Python/入门/控制语句.md b/wiki/programming-language/Python/入门/控制语句.md index 17d36c4c..a85d55c1 100644 --- a/wiki/programming-language/Python/入门/控制语句.md +++ b/wiki/programming-language/Python/入门/控制语句.md @@ -1,8 +1,14 @@ --- -id: 控制语句 title: 控制语句 -sidebar_position: 2 -data: 2022年2月9日 +description: Python 控制语句 +keywords: +- Python +- 控制语句 +tags: +- Python +sidebar_position: 3 +author: 7Wate +date: 2022-11-19 --- ## 判断 @@ -12,20 +18,17 @@ data: 2022年2月9日 在Python中,要构造分支结构可以使用`if`、`elif`和`else`关键字。 ```python -""" -用户身份验证 - -Version: 0.1 -Author: 骆昊 -""" - -username = input('请输入用户名: ') -password = input('请输入口令: ') -# 用户名是admin且密码是123456则身份验证成功否则身份验证失败 -if username == 'admin' and password == '123456': - print('身份验证成功!') -else: - print('身份验证失败!') +>>> x = int(input("Please enter an integer: ")) +Please enter an integer: 42 +>>> if x < 0: + x = 0 + print('Negative changed to zero') + elif x == 0: + print('Zero') + elif x == 1: + print('Single') + else: + print('More') ``` 当然如果要构造出更多的分支,可以使用`if...elif...else...`结构或者嵌套的`if...else...`结构。 @@ -47,7 +50,7 @@ def http_error(status): return "Something's wrong with the internet" ``` -最后一个代码块: "变量名" `_` 被作为 *通配符* 并必定会匹配成功。 如果没有任何 case 语句匹配成功,则任何分支都不会被执行。 +最后一个代码块: **"变量名" `_` 被作为 通配符 并必定会匹配成功**。 如果没有任何 case 语句匹配成功,则任何分支都不会被执行。 你可以使用 `|` (“ or ”)在一个模式中组合几个字面值: @@ -60,7 +63,7 @@ case 401 | 403 | 404: ### for -Python 的 for 语句与 C 或 Pascal 中的不同。Python 的 for 语句不迭代算术递增数值(如 Pascal),或是给予用户定义迭代步骤和暂停条件的能力(如 C),而是迭代列表或字符串等任意序列,元素的迭代顺序与在序列中出现的顺序一致。 +Python 的 for 语句与 C 或 Pascal 中的不同。**Python 的 for 语句不迭代算术递增数值**(如 Pascal),或是给予用户定义迭代步骤和暂停条件的能力(如 C),而是迭代列表或字符串等任意序列,元素的迭代顺序与在序列中出现的顺序一致。 ```python """ @@ -76,12 +79,14 @@ for x in range(101): print(sum) ``` -`range(101)`可以用来构造一个从1到100的范围,当我们把这样一个范围放到`for-in`循环中,就可以通过前面的循环变量`x`依次取出从1到100的整数。当然,`range`的用法非常灵活,下面给出了一个例子: +**内置函数 range() 表示不可变的数字序列,通常用于在 for 循环中循环指定的次数。** -- `range(101)`:可以用来产生0到100范围的整数,需要注意的是取不到101。 -- `range(1, 101)`:可以用来产生1到100范围的整数,相当于前面是闭区间后面是开区间。 -- `range(1, 101, 2)`:可以用来产生1到100的奇数,其中2是步长,即每次数值递增的值。 -- `range(100, 0, -2)`:可以用来产生100到1的偶数,其中-2是步长,即每次数字递减的值。 +`range(101)`可以用来构造一个从 1 到 100 的范围,当我们把这样一个范围放到 `for-in` 循环中,就可以通过前面的循环变量 `x` 依次取出从 1 到 100 的整数。当然,`range` 的用法非常灵活,下面给出了一个例子: + +- `range(101)`:可以用来产生 0 到 100 范围的整数,需要注意的是取不到 101。 +- `range(1, 101)`:可以用来产生 1 到 100 范围的整数,相当于前面是闭区间后面是开区间。 +- `range(1, 101, 2)`:可以用来产生 1 到 100 的奇数,其中 2 是步长,即每次数值递增的值。 +- `range(100, 0, -2)`:可以用来产生 100 到 1 的偶数,其中 -2 是步长,即每次数字递减的值。 ### while @@ -203,6 +208,41 @@ except: raise ``` +### with + +Python 的 [`with`](https://docs.python.org/zh-cn/3/reference/compound_stmts.html#with) 语句支持通过上下文管理器所定义的运行时上下文这一概念。 此对象的实现使用了一对专门方法,**允许用户自定义类来定义运行时上下文**,在语句体被执行前进入该上下文,并在语句执行完毕时退出该上下文。 + +通过上下文管理器,我们可以更好的控制对象在不同区间的特性,并且**可以使用 with 语句替代 try...except** 方法,使得代码更加的简洁,主要的**使用场景是访问资源,可以保证不管过程中是否发生错误或者异常都会执行相应的清理操作,释放出访问的资源。** + +```python +# with 读写文件 +with open("myfile.txt") as f: + for line in f: + print(line, end="") +``` + +```python +# 基本思想是 with 所求值的对象必须有一个 enter() 方法,一个 exit() 方法。 +# 紧跟 with 后面的语句被求值后,返回对象的 enter() 方法被调用,并将返回值赋值给 as 后面的变量。 +# 当 with 的代码块全部被执行完之后,将调用前面返回对象的 exit() 方法。 + +class Sample: + def __enter__(self): + print("In __enter__()") + return "Foo" + + def __exit__(self, type, value, trace): + print("In __exit__()") + + +def get_sample(): + return Sample() + + +with get_sample() as sample: + print("sample:", sample) +``` + ### raise `raise`语句支持强制触发指定的异常。例如: @@ -218,6 +258,24 @@ NameError: HiThere ## 其他 +### assert + +Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。 + +简单形式 `assert expression` 等价于: + +```python +if __debug__: + if not expression: raise AssertionError +``` + +扩展形式 `assert expression1, expression2` 等价于: + +```python +if __debug__: + if not expression1: raise AssertionError(expression2) +``` + ### pass pass 语句不执行任何操作。语法上需要一个语句,但程序不实际执行任何动作时,可以使用该语句。例如: diff --git a/wiki/programming-language/Python/入门/数据结构.md b/wiki/programming-language/Python/入门/数据结构.md index df7bf0ec..b05147c4 100644 --- a/wiki/programming-language/Python/入门/数据结构.md +++ b/wiki/programming-language/Python/入门/数据结构.md @@ -1,7 +1,7 @@ --- id: 数据结构 title: 数据结构 -sidebar_position: 2.5 +sidebar_position: 4 data: 2022年2月11日 --- diff --git a/wiki/programming-language/Python/入门/简介.md b/wiki/programming-language/Python/入门/简介.md index 53612ef9..73bc1a3c 100644 --- a/wiki/programming-language/Python/入门/简介.md +++ b/wiki/programming-language/Python/入门/简介.md @@ -1,7 +1,7 @@ --- id: 简介 title: 简介 -sidebar_position: 0 +sidebar_position: 1 data: 2022年2月9日 --- diff --git a/wiki/programming-language/Python/入门/面对对象.md b/wiki/programming-language/Python/入门/面对对象.md index 127d261d..2d057632 100644 --- a/wiki/programming-language/Python/入门/面对对象.md +++ b/wiki/programming-language/Python/入门/面对对象.md @@ -1,7 +1,7 @@ --- id: 面对对象 title: 面对对象 -sidebar_position: 4 +sidebar_position: 6 data: 2022年1月28日 ---