Skip to content

Commit 81a5cdd

Browse files
Python update by Fl0at9973
1 parent 42ccb88 commit 81a5cdd

File tree

1 file changed

+182
-4
lines changed

1 file changed

+182
-4
lines changed

docs/languages/python/index.md

Lines changed: 182 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
+ 胶水型语言,简洁灵活
4343
+ <s>拯救你的大一小学期</s>
4444

45-
## 安装与 Hello World
45+
## 安装、运行与 Hello World
4646

4747
### Python 的安装
4848

@@ -68,13 +68,17 @@
6868

6969
可参考 https://zhuanlan.zhihu.com/p/82011100,在了解环境变量的基本概念后,如果你忘记了在安装时将 Python 所在路径添加到环境变量中,可以自行尝试将其添加入 Path。
7070

71+
### 线上平台运行
72+
73+
如果安装暂时有困难,可以先前往类似 [programiz](https://www.programiz.com/python-programming/online-compiler/)[w3cschool](https://www.w3schools.com/python/trypython.asp?filename=demo_default) 的线上平台进行一些编程语法的实验。
74+
7175
### 交互式窗口与脚本文件
7276

7377
基于解释型语言的特点,Python 代码可以分为**交互式窗口****脚本文件**两种**执行方式**
7478

7579
+ 交互式窗口:如在命令行输入 `python`,即可进入交互式窗口,此时如同“问答”一般,输入一行代码后,Python 立刻执行该行代码并给出返回值。退出界面的方法是按 `Ctrl+D` 或者执行 `exit()`(Windows 用户请使用 `Ctrl+Z`)。
7680

77-
+ 脚本:经典运行方法 `python xxx.py`,Python 会将整个脚本按照语句的顺序依次从头到尾执行。
81+
+ 脚本:经典运行方法 `python <your file>`,Python 会将整个脚本按照语句的顺序依次从头到尾执行。
7882

7983
<center>
8084
<img src="https://i.loli.net/2021/09/28/x2OUFItBZC4oN7R.png" />
@@ -204,6 +208,22 @@ c7w
204208

205209
可见将不同类型的值直接进行运算会导致错误,必须先将其中的一些值显式转换为正确类型的值。
206210

211+
### 输入
212+
213+
Python 语言之中,我们可以使用 `input()` 函数来获取用户的输入。
214+
215+
```python
216+
a = input("请输入你的年龄")
217+
```
218+
219+
这样做可以获取用户的输入,并将其赋值给变量 `a`,但默认会将你的输入当作字符串类型。如果你想要得到数字的话,需要用到一层类型转换:
220+
221+
```python
222+
a = int(input("请输入你的年龄"))
223+
```
224+
225+
这样就可以将输入转化为 `int` 类型。当你的输入字符无法转化为 `int` 时,会抛出 `ValureError` 异常。
226+
207227
### 运算符
208228

209229
下列是 Python 语言之中的合法运算符,其含义与 C/C++ 语言基本一致。其后列出了相应的重载函数,这些重载函数的用法在后续的面向对象章节之中再详细介绍。
@@ -259,6 +279,16 @@ c7w
259279
+ 同地址运算符 `is`,用于判定两个变量的地址是否相同
260280
+ 不同地址运算符 `is not`
261281

282+
!!! note "is运算符与None的配合"
283+
284+
按照上述定义,大家可能会把 `is` 理解为 C++ 中取地址再进行比较的操作,但在 Python 中其实际应用场景不止是这样。
285+
286+
在 Python 中,`None` 是一个内置的常量,表示值或对象的缺失。通常用来指示变量或对象没有值或尚未初始化。
287+
288+
`None` 经常用作函数的默认返回值,表示这些函数不返回任何有意义的值。其也可以指示变量或对象当前并未初始化。
289+
290+
由于其为一个**内置的常量**,所有值是None类型的变量都指向同一个地址。因此,当我要确认一个变量是否为 `None` 时,可以并且更加推荐使用 `is` 而非 `==` 运算符。
291+
262292
!!! question "[Checkpoint Python-02] Operators"
263293

264294
1. 【精度测试】Python 的“高精度”体现在何处?尝试使用 Python 进行以下运算,并输出其结果。
@@ -311,6 +341,10 @@ else:
311341
print('kid')
312342
```
313343

344+
虽然 `elif` 使代码更加简洁,减少了很多不必要的缩进,但是我们仍然需要避免大量多层嵌套的情况,建议仍然使用函数代替嵌套内的代码,达到“转移矛盾”的效果。
345+
346+
事实上,任何一种语言的多层嵌套都需要缩进,无论如何总是会影响阅读、带来较大的心智复旦,我们在时间的过程中要尽量避免这种情况。
347+
314348
### 循环语句
315349

316350
`while` 循环:
@@ -327,9 +361,10 @@ while a <= 100:
327361
```python
328362
for i in range(0, 100): # range(0, 100) = [0, 1, 2, ..., 99]
329363
print(i) # 本质上是在一个可迭代对象中遍历所有元素
330-
331364
```
332365

366+
同时,`break``continue` 这些语句在 Python 循环中也是可以正常使用的。
367+
333368
### 函数的写法
334369

335370
定义函数的写法:
@@ -344,6 +379,73 @@ def my_abs(x):
344379

345380
注意第一行固定格式 `def <func_name>(params, ...):`,其他和 C/C++ 差别不大。作为动态类型语言,函数返回类型不固定,可以有多个 `return` 以在不同情况下返回不同内容,或者没有 `return`(等价于 `return None`)。
346381

382+
如果要定义一个空的函数,可以使用:
383+
384+
```python
385+
def Fl0at9973_do_nothing():
386+
pass
387+
```
388+
389+
也可以在函数定义行末尾添加上它的返回值,但这不会对代码运行造成任何影响与限制,只是给程序员自己看的而已。
390+
391+
```python
392+
def shell_string() -> str:
393+
ret = 3
394+
return ret # No Error
395+
```
396+
397+
### 函数的参数
398+
399+
Python 函数的参数传递非常灵活,其支持四类参数:位置参数,关键字参数,默认参数和可变参数。
400+
401+
+ 位置参数
402+
位置参数就是按照定义时的顺序传入函数,比如:
403+
```python
404+
def greet(name, message):
405+
print(f"{message}, {name}!")
406+
```
407+
+ 关键字参数
408+
关键字参数允许传入的参数名任意指定,不按照函数定义时的参数顺序传参:
409+
```python
410+
# 依然是上文的函数
411+
greet(message="Hello", name="Kid")
412+
# 输出:Hello, Kid!
413+
```
414+
+ 默认参数
415+
默认参数就是当函数调用时没有传入参数时,使用默认参数的值。
416+
```python
417+
def greet(name, message="Hello"):
418+
print(f"{message}, {name}!")
419+
420+
greet("Alice")  # 输出 "Hello, Alice!"
421+
greet("Bob", "Hi")  # 输出 "Hi, Bob!"
422+
```
423+
+ 可变参数
424+
在Python中,可变参数有两种:`*args` 与 `**kwargs` 。我们先来看前者:
425+
426+
`*args` 表示任意多个位置参数,它是一个元组类型(元组在后文会介绍)。
427+
```python
428+
def add(*args):
429+
res = 0
430+
for num in args:
431+
res += num
432+
return res
433+
434+
print(add(1, 2, 3))  # 输出 6
435+
print(add(1, 2, 3, 4, 5))  # 输出 15
436+
```
437+
438+
`**kwargs` 表示任意多个关键字参数,它是一个字典类型(字典在后文会介绍),不过在传入时我们并不需要显式地写成字典。
439+
```python
440+
def greet(**kwargs):
441+
   for key, value in kwargs.items():
442+
       print(f"{key}: {value}")
443+
444+
greet(name="Alice", message="Hello")  # 输出 "name: Alice" 和 "message: Hello"
445+
446+
greet(name="Bob", age=30, city="New York")  # 输出 "name: Bob"、"age: 30" 和 "city: New York"
447+
```
448+
347449
!!! question "[Checkpoint Python-03] Runtime logic"
348450

349451
请定义一个函数 `fib`,接受一个整型变量 `n` 作为输入,返回斐波那契数列的第 `n` 项。
@@ -437,6 +539,63 @@ The area of a circle with radius 2.5 is 19.62
437539
>>> a.replace("北京大学", "清华大学")
438540
'我爱清华大学,清华大学是世一大,清华大学yyds'
439541
```
542+
543+
+ `len(obj)` 常用语获取字符串、字节串或容器的长度
544+
545+
+ `chr(i)` 将整型变量 `i` 转化为长度为 1 的字符串
546+
547+
+ `ord(c)` 获取(长度为 1 的)字符(串)的编号(Unicode)
548+
549+
!!! note "字节串"
550+
`bytes` 是 Python 中的字节串,它表示最纯粹的“二进制”数据,非常像 C 中的 `unsigned char *` 、但是在显示上仅支持 ASCII 显示、用肉眼看会有些“不伦不类”。通常其值存在于数据的处理过程中。
551+
552+
`bytes` 的构造与字符串类似,但是要加一个 `b` 做前导:
553+
554+
```python
555+
print(b'123')
556+
# Output: b'123'
557+
558+
print(b'\1')
559+
# Output: b'\x01' 
560+
561+
print(b'\x41')
562+
# Output: b'A'
563+
564+
print(b'\x61\x62')
565+
# Output: b'ab'
566+
567+
print(len(b'\x61\x62'))
568+
# Output: 2
569+
```
570+
571+
其中 `\x` 表示将字符转义成对应的 ASCII 字符。
572+
573+
### 编码与解码
574+
575+
上文中已经陈述了一些常见的编码。由于 Python 胶水语言的特性,读者以后很有可能会遇到使用 Python 处理文件的需求,这时候字符的编码解码将是必须的话题,以下介绍一些使用 Python 自带的编码和解码器的例子:
576+
577+
```python
578+
In [1]: 'Hello world'.encode()
579+
Out[1]: b'Hello world'
580+
581+
In [2]: b'Hello world'.decode()
582+
Out[2]: 'Hello world'
583+
584+
In [3]: '你好'.encode()
585+
Out[3]: b'\xe4\xbd\xa0\xe5\xa5\xbd'
586+
587+
In [4]: '你好'.encode('utf-8')
588+
Out[4]: b'\xe4\xbd\xa0\xe5\xa5\xbd'
589+
590+
In [5]: '你好'.encode('gbk')
591+
Out[5]: b'\xc4\xe3\xba\xc3'
592+
593+
In [6]: b'\xe4\xbd\xa0\xe5\xa5\xbd'.decode('utf-8') # 使⽤了正确的格式解码
594+
Out[6]: '你好'
595+
596+
In [7]: b'\xe4\xbd\xa0\xe5\xa5\xbd'.decode('gbk') # 使⽤了错误的格式解码
597+
Out[7]: '浣犲ソ'
598+
```
440599

441600
### 扩展数据类型
442601

@@ -447,6 +606,9 @@ Python 内置的一种数据类型是列表。`list` 是一种类似于向量的
447606
```python
448607
>>> a = [2, 3] # Init a list
449608

609+
>>> Fl0at9973_blank = [] # Init a blank list
610+
# alternatively, Fl0at9973_blank = list()
611+
450612
>>> a.append(4) # Append elements to list
451613
>>> a
452614
[2, 3, 4]
@@ -693,6 +855,20 @@ Linux 用户可以使用 `sudo apt update && sudo apt install pip3` 来安装。
693855

694856
Python 的强大之处在于其丰富的第三方库,为了进一步学习、运用 Python 语言,我们推荐读者自行搜索下列第三方库的介绍、文档,并尝试在自己的程序中使用它们。有余力的读者甚至可以去阅读这些第三方库的源代码。
695857

858+
### 系统调用
859+
860+
+ os
861+
+ sys
862+
863+
### 日常工具
864+
865+
+ re
866+
+ datetime
867+
+ math
868+
+ random
869+
+ json
870+
+ sqlite3
871+
696872
### 图像处理
697873

698874
+ Pillow
@@ -721,7 +897,9 @@ Python 的强大之处在于其丰富的第三方库,为了进一步学习、
721897
## 资源链接
722898

723899
+ 2020 暑培讲义 by rls
900+
+ 2021 暑培讲义 by ayf
901+
+ 2022 暑培讲义 by zcy
902+
+ 2023 暑培讲义 by lyf
724903
+ Python Docs <https://www.python.org/doc/>
725904
+ Runoob <https://www.runoob.com/python3/python3-tutorial.html>
726905
+ 廖雪峰 <https://www.liaoxuefeng.com/wiki/1016959663602400/>
727-

0 commit comments

Comments
 (0)