doc: update docs/python.md (#394)
* doc: 修正 Python 清单中的机翻文本 * doc: 增补注释和示例,使用例更贴合本土 * doc: 更正修正中的错误 * doc: 配合 #385 将介绍中的链接也改为中文版
This commit is contained in:
parent
0d0e92dd56
commit
fb1fa4b47f
262
docs/python.md
262
docs/python.md
@ -8,46 +8,48 @@ Python 备忘单是 [Python 3](https://www.python.org/) 编程语言的单页参
|
||||
|
||||
### 介绍
|
||||
|
||||
- [Python](https://www.python.org/) _(python.org)_
|
||||
- [Python 官方网站](https://www.python.org/) _(python.org)_
|
||||
- [Python 文档](https://docs.python.org/zh-cn/3/index.html) _(docs.python.org)_
|
||||
- [Learn X in Y minutes](https://learnxinyminutes.com/docs/python/) _(learnxinyminutes.com)_
|
||||
- [Regex in python](./regex.md#python-中的正则表达式) _(jaywcjlove.github.io)_
|
||||
- [Y 分钟学会 Python](https://learnxinyminutes.com/docs/zh-cn/python-cn/) _(learnxinyminutes.com)_
|
||||
- [Python 中的正则表达式](./regex.md#python-中的正则表达式) _(jaywcjlove.github.io)_
|
||||
|
||||
### Hello World
|
||||
### 控制台打印
|
||||
|
||||
```python
|
||||
>>> print("Hello, World!")
|
||||
Hello, World!
|
||||
```
|
||||
|
||||
Python 中著名的“Hello World”程序
|
||||
著名的“Hello World”程序在 Python 中的实现
|
||||
|
||||
### 变量
|
||||
|
||||
```python
|
||||
age = 18 # 年龄是 int 类型
|
||||
name = "John" # name 现在是 str 类型
|
||||
name = "John" # 名字现在是 str 类型
|
||||
print(name)
|
||||
```
|
||||
|
||||
Python 不能在没有赋值的情况下声明变量
|
||||
- Python 不能在没有赋值的情况下声明变量
|
||||
- 变量可以存放不同类型的值
|
||||
|
||||
### 数据类型
|
||||
### 内置数据类型
|
||||
<!--rehype:wrap-class=row-span-2-->
|
||||
序列指一批有序的元素,集合指一批无序且不重复的元素
|
||||
|
||||
:-| :-
|
||||
:-| :-
|
||||
`str` | Text
|
||||
`int`, `float`, `complex` | Numeric
|
||||
`list`, `tuple`, `range` | Sequence
|
||||
`dict` | Mapping
|
||||
`set`, `frozenset` | Set
|
||||
`bool` | Boolean
|
||||
`bytes`, `bytearray`, `memoryview` | Binary
|
||||
| :- | :- |
|
||||
|:----------------------------------------|:-----------------|
|
||||
| `str` | 文本/字符串(Text) |
|
||||
| `int`, `float`, `complex` | 数值(Numeric) |
|
||||
| `dict` | 映射/键值对(Mapping) |
|
||||
| `list`, `tuple`, `range` | 序列(Sequence) |
|
||||
| `set`, `frozenset` | 集合(Set) |
|
||||
| `bool` | 布尔值/逻辑值(Boolean) |
|
||||
| `bytes`, `bytearray`, <br> `memoryview` | 二进制数据(Binary) |
|
||||
|
||||
查看: [Data Types](#python-数据类型)
|
||||
查看: [数据类型](#python-数据类型)
|
||||
|
||||
### Slicing String
|
||||
### 字符串切片
|
||||
|
||||
```python
|
||||
>>> msg = "Hello, World!"
|
||||
@ -55,9 +57,9 @@ Python 不能在没有赋值的情况下声明变量
|
||||
llo
|
||||
```
|
||||
|
||||
查看: [Strings](#python-字符串)
|
||||
查看: [字符串](#python-字符串)
|
||||
|
||||
### Lists
|
||||
### 列表
|
||||
|
||||
```python
|
||||
mylist = []
|
||||
@ -67,9 +69,9 @@ for item in mylist:
|
||||
print(item) # 打印输出 1,2
|
||||
```
|
||||
|
||||
查看: [Lists](#python-lists)
|
||||
查看: [列表](#python-列表)
|
||||
|
||||
### If Else
|
||||
### 判断
|
||||
|
||||
```python
|
||||
num = 200
|
||||
@ -79,7 +81,7 @@ else:
|
||||
print("num is not greater than 0")
|
||||
```
|
||||
|
||||
查看: [流程控制](#python-流程控制)
|
||||
查看: [判断](#python-判断)
|
||||
|
||||
### 循环
|
||||
|
||||
@ -91,7 +93,7 @@ else:
|
||||
print("Finally finished!")
|
||||
```
|
||||
|
||||
查看: [Loops](#python-循环)
|
||||
查看: [循环](#python-循环)
|
||||
|
||||
### 函数
|
||||
|
||||
@ -103,7 +105,7 @@ else:
|
||||
来自函数的你好
|
||||
```
|
||||
|
||||
查看: [Functions](#函数)
|
||||
查看: [函数](#函数)
|
||||
|
||||
### 文件处理
|
||||
<!--rehype:wrap-class=col-span-2-->
|
||||
@ -153,7 +155,7 @@ message += "Part 2."
|
||||
'10 + 10 = 20'
|
||||
```
|
||||
|
||||
查看: [Python F-Strings](#python-f-字符串自-python-36-起)
|
||||
查看: [f-字符串](#python-f-字符串-python-36)
|
||||
|
||||
Python 数据类型
|
||||
---------------
|
||||
@ -168,18 +170,20 @@ Lorem ipsum dolor sit amet,
|
||||
consectetur adipiscing elit """
|
||||
```
|
||||
|
||||
查看: [Strings](#python-字符串)
|
||||
查看: [字符串](#python-字符串)
|
||||
|
||||
### 数字
|
||||
### 数值
|
||||
|
||||
```python
|
||||
x = 1 # int
|
||||
y = 2.8 # float
|
||||
z = 1j # complex
|
||||
x = 1 # 整数
|
||||
y = 2.8 # 浮点小数
|
||||
z = 1j # 复数
|
||||
>>> print(type(x))
|
||||
<class 'int'>
|
||||
```
|
||||
|
||||
只要内存足够,可以容纳无限大(小)的数值
|
||||
|
||||
### 布尔值
|
||||
|
||||
```python
|
||||
@ -189,7 +193,9 @@ bool(0) # => False
|
||||
bool(1) # => True
|
||||
```
|
||||
|
||||
### Lists
|
||||
bool 是 int 的子类
|
||||
|
||||
### 列表
|
||||
|
||||
```python
|
||||
list1 = ["apple", "banana", "cherry"]
|
||||
@ -198,27 +204,27 @@ list3 = [1, 5, 7, 9, 3]
|
||||
list4 = list((1, 5, 7, 9, 3))
|
||||
```
|
||||
|
||||
查看: [Lists](#python-lists)
|
||||
查看: [列表](#python-列表)
|
||||
|
||||
### 元组 Tuple
|
||||
### 元组
|
||||
|
||||
```python
|
||||
my_tuple = (1, 2, 3)
|
||||
my_tuple = tuple((1, 2, 3))
|
||||
```
|
||||
|
||||
类似于 List 但不可变
|
||||
类似列表,但自身不可变
|
||||
|
||||
### Set
|
||||
### 集合
|
||||
|
||||
```python
|
||||
set1 = {"a", "b", "c"}
|
||||
set2 = set(("a", "b", "c"))
|
||||
```
|
||||
|
||||
一组独特的项目/对象
|
||||
类似列表,但里面的元素是无序而不重复的
|
||||
|
||||
### 字典 Dictionary
|
||||
### 字典
|
||||
|
||||
```python
|
||||
>>> empty_dict = {}
|
||||
@ -236,50 +242,50 @@ dict_keys(['one', 'two', 'three', 'four'])
|
||||
4
|
||||
```
|
||||
|
||||
Key:值对,JSON 类对象
|
||||
键-值对,一种像 JSON 那样对象
|
||||
|
||||
### Casting
|
||||
### 类型转换
|
||||
|
||||
#### 整数 Integers
|
||||
#### 转换为整数
|
||||
|
||||
```python
|
||||
x = int(1) # x 将是 1
|
||||
y = int(2.8) # y 将是 2
|
||||
z = int("3") # z 将是 3
|
||||
x = int(1) # 得到 1
|
||||
y = int(2.8) # 得到 2
|
||||
z = int("3") # 得到 3
|
||||
```
|
||||
|
||||
#### 浮点数 Floats
|
||||
#### 转换为浮点数
|
||||
|
||||
```python
|
||||
x = float(1) # x 将为 1.0
|
||||
y = float(2.8) # y 将是 2.8
|
||||
z = float("3") # z 将为 3.0
|
||||
w = float("4.2") # w 将是 4.2
|
||||
x = float(1) # 得到 1.0
|
||||
y = float(2.8) # 得到 2.8
|
||||
z = float("3") # 得到 3.0
|
||||
w = float("4.2") # 得到 4.2
|
||||
```
|
||||
|
||||
#### 字符串 Strings
|
||||
#### 转换为字符串
|
||||
|
||||
```python
|
||||
x = str("s1") # x 将是 's1'
|
||||
y = str(2) # y 将是 '2'
|
||||
z = str(3.0) # z 将是 '3.0'
|
||||
x = str("s1") # 得到 "s1"
|
||||
y = str(2) # 得到 "2"
|
||||
z = str(3.0) # 得到 "3.0"
|
||||
```
|
||||
|
||||
Python 字符串
|
||||
------------
|
||||
|
||||
### 类数组
|
||||
### 下标访问
|
||||
|
||||
```python
|
||||
>>> hello = "Hello, World"
|
||||
>>> print(hello[1])
|
||||
>>> print(hello[1]) # 获取第二个字符
|
||||
e
|
||||
>>> print(hello[-1])
|
||||
>>> print(hello[-1]) # 获取倒数第一个字符
|
||||
d
|
||||
>>> print(type(hello[-1])) # 得到的还是字符串
|
||||
<class 'str'>
|
||||
```
|
||||
|
||||
获取位置 `1` 或最后的字符
|
||||
|
||||
### 循环
|
||||
|
||||
```python
|
||||
@ -290,9 +296,9 @@ o
|
||||
o
|
||||
```
|
||||
|
||||
遍历单词 `foo` 中的字母
|
||||
对字符串 for-in 可以得到每个字符(类型还是字符串)
|
||||
|
||||
### 切片字符串
|
||||
### 切割字符串
|
||||
<!--rehype:wrap-class=row-span-4-->
|
||||
|
||||
```java
|
||||
@ -353,7 +359,7 @@ o
|
||||
'5432154321543215432154321'
|
||||
```
|
||||
|
||||
### 字符串长度
|
||||
### 获取长度
|
||||
|
||||
```python
|
||||
>>> hello = "Hello, World!"
|
||||
@ -363,7 +369,7 @@ o
|
||||
|
||||
`len()` 函数返回字符串的长度
|
||||
|
||||
### 多份
|
||||
### 重复多次
|
||||
|
||||
```python
|
||||
>>> s = '===+'
|
||||
@ -372,7 +378,7 @@ o
|
||||
'===+===+===+===+===+===+===+===+'
|
||||
```
|
||||
|
||||
### 检查字符串
|
||||
### 存在性判断
|
||||
|
||||
```python
|
||||
>>> s = 'spam'
|
||||
@ -382,14 +388,16 @@ True
|
||||
True
|
||||
```
|
||||
|
||||
### 连接
|
||||
判断 "spam" 这个字符串是否在其它字符串里
|
||||
|
||||
### 字符串拼接
|
||||
|
||||
```python
|
||||
>>> s = 'spam'
|
||||
>>> t = 'egg'
|
||||
>>> s + t
|
||||
>>> s + t # 可以使用加号进行拼接
|
||||
'spamegg'
|
||||
>>> 'spam' 'egg'
|
||||
>>> 'spam' 'egg' # 两个字符串之间可以省略加号
|
||||
'spamegg'
|
||||
```
|
||||
|
||||
@ -417,7 +425,7 @@ txt2 = "My name is {0}, I'm {1}".format("John", 36)
|
||||
txt3 = "My name is {}, I'm {}".format("John", 36)
|
||||
```
|
||||
|
||||
### Input 输入
|
||||
### 控制台输入
|
||||
|
||||
```python
|
||||
>>> name = input("Enter your name: ")
|
||||
@ -428,16 +436,23 @@ Enter your name: Tom
|
||||
|
||||
从控制台获取输入数据
|
||||
|
||||
### Join 加入
|
||||
### 插入分隔符拼接
|
||||
|
||||
```python
|
||||
>>> "#".join(["John", "Peter", "Vicky"])
|
||||
'John#Peter#Vicky'
|
||||
>>> "、".join(["John", "Peter", "Vicky"])
|
||||
'John、Peter、Vicky'
|
||||
```
|
||||
|
||||
### Endswith 以..结束
|
||||
### 头尾判断
|
||||
|
||||
```python
|
||||
>>> # 是否以 H 开头
|
||||
>>> "Hello, world!".endswith("H")
|
||||
True
|
||||
>>> # 是否以 h 开头
|
||||
>>> "Hello, world!".endswith("h")
|
||||
False
|
||||
>>> # 是否以 ! 结尾
|
||||
>>> "Hello, world!".endswith("!")
|
||||
True
|
||||
```
|
||||
@ -445,7 +460,7 @@ True
|
||||
### 转义符号
|
||||
|
||||
| 转义符号 | 对应的操作 |
|
||||
|---|---|
|
||||
|------|--------|
|
||||
| `\\` | 输出反斜杠 |
|
||||
| `\'` | 输出单引号 |
|
||||
| `\"` | 输出双引号 |
|
||||
@ -454,10 +469,10 @@ True
|
||||
| `\r` | 光标回到首位 |
|
||||
| `\b` | 退格 |
|
||||
|
||||
Python F 字符串(自 Python 3.6+ 起)
|
||||
Python f-字符串 (Python 3.6+)
|
||||
----------------
|
||||
|
||||
### f-Strings 用法
|
||||
### f-字符串 用法
|
||||
<!--rehype:wrap-class=row-span-2-->
|
||||
|
||||
```python
|
||||
@ -481,38 +496,38 @@ Python F 字符串(自 Python 3.6+ 起)
|
||||
"Hello!\n I'm Eric.\n I'm 27."
|
||||
```
|
||||
|
||||
它从 Python 3.6 开始可用,另见: [格式化的字符串文字](https://docs.python.org/3/reference/lexical_analysis.html#f-strings)
|
||||
它从 Python 3.6 开始可用,另见: [格式字符串字面值](https://docs.python.org/zh-cn/3/reference/lexical_analysis.html#f-strings)
|
||||
|
||||
### f-Strings 填充对齐
|
||||
### 填充对齐
|
||||
|
||||
```python
|
||||
>>> f'{"text":10}' # [宽度]
|
||||
>>> f'{"text":10}' # 使用空格填充到指定长度
|
||||
'text '
|
||||
>>> f'{"test":*>10}' # 向左填充
|
||||
'******test'
|
||||
>>> f'{"test":*<10}' # 向右填充
|
||||
'test******'
|
||||
>>> f'{"test":*^10}' # 填充中心
|
||||
>>> f'{"test":*^10}' # 居中填充
|
||||
'***test***'
|
||||
>>> f'{12345:0>10}' # 填写数字
|
||||
>>> f'{12345:0>10}' # 使用数字填充
|
||||
'0000012345'
|
||||
```
|
||||
|
||||
### f-Strings 类型
|
||||
### 按类型输出
|
||||
<!--rehype:wrap-class=row-span-2-->
|
||||
|
||||
```python
|
||||
>>> f'{10:b}' # binary 二进制类型
|
||||
>>> f'{10:b}' # 输出二进制数值
|
||||
'1010'
|
||||
>>> f'{10:o}' # octal 八进制类型
|
||||
>>> f'{10:o}' # 输出八进制数值
|
||||
'12'
|
||||
>>> f'{200:x}' # hexadecimal 十六进制类型
|
||||
>>> f'{200:x}' # 输出十六进制数值
|
||||
'c8'
|
||||
>>> f'{200:X}'
|
||||
'C8'
|
||||
>>> f'{345600000000:e}' # 科学计数法
|
||||
'3.456000e+11'
|
||||
>>> f'{65:c}' # 字符类型
|
||||
>>> f'{65:c}' # 将整数转化为一个字符后输出
|
||||
'A'
|
||||
>>> f'{10:#b}' # [类型] 带符号(基础)
|
||||
'0b1010'
|
||||
@ -522,20 +537,20 @@ Python F 字符串(自 Python 3.6+ 起)
|
||||
'0xa'
|
||||
```
|
||||
|
||||
### F-Strings Sign
|
||||
### 显示正负号
|
||||
|
||||
```python
|
||||
>>> f'{12345:+}' # [sign] (+/-)
|
||||
>>> f'{12345:+}' # 显示正数的正号
|
||||
'+12345'
|
||||
>>> f'{-12345:+}'
|
||||
>>> f'{-12345:+}' # 显示负数的负号
|
||||
'-12345'
|
||||
>>> f'{-12345:+10}'
|
||||
>>> f'{-12345:+10}' # 显示负号,并使用空格填充,直到长度为 10
|
||||
' -12345'
|
||||
>>> f'{-12345:+010}'
|
||||
>>> f'{-12345:+010}' # 显示负号,并使用0填充,直到长度为 10
|
||||
'-000012345'
|
||||
```
|
||||
|
||||
### F-Strings 其它
|
||||
### 其它
|
||||
|
||||
```python
|
||||
>>> f'{-12345:0=10}' # 负数
|
||||
@ -559,7 +574,7 @@ Python F 字符串(自 Python 3.6+ 起)
|
||||
'25%'
|
||||
```
|
||||
|
||||
Python Lists
|
||||
Python 列表
|
||||
------------
|
||||
|
||||
### 定义
|
||||
@ -593,7 +608,7 @@ Python Lists
|
||||
[6, 7]
|
||||
```
|
||||
|
||||
### 添加
|
||||
### 添加元素
|
||||
|
||||
```python
|
||||
>>> li = []
|
||||
@ -611,7 +626,7 @@ Python Lists
|
||||
[1, 2, 4, 3]
|
||||
```
|
||||
|
||||
### List 切片
|
||||
### 切片
|
||||
<!--rehype:wrap-class=col-span-2 row-span-3-->
|
||||
|
||||
列表切片的语法:
|
||||
@ -650,7 +665,7 @@ a_list[start:end:step]
|
||||
['spam', 'egg', 'bacon', 'tomato', 'ham', 'lobster']
|
||||
```
|
||||
|
||||
#### 跳跃索引
|
||||
#### 间隔索引
|
||||
|
||||
```python
|
||||
['spam', 'egg', 'bacon', 'tomato', 'ham', 'lobster']
|
||||
@ -735,10 +750,10 @@ IndexError: list index out of range
|
||||
['re', 're', 're']
|
||||
```
|
||||
|
||||
Python 流程控制
|
||||
Python 判断
|
||||
------------
|
||||
|
||||
### 基本
|
||||
### 一般形式
|
||||
|
||||
```python
|
||||
num = 5
|
||||
@ -750,7 +765,7 @@ else:
|
||||
print("num is indeed 10.")
|
||||
```
|
||||
|
||||
### 一行
|
||||
### 单行形式
|
||||
|
||||
```python
|
||||
>>> a = 330
|
||||
@ -760,22 +775,12 @@ else:
|
||||
a
|
||||
```
|
||||
|
||||
### else if
|
||||
|
||||
```python
|
||||
value = True
|
||||
if not value:
|
||||
print("Value is False")
|
||||
elif value is None:
|
||||
print("Value is None")
|
||||
else:
|
||||
print("Value is True")
|
||||
```
|
||||
注意条件是放在中间的
|
||||
|
||||
Python 循环
|
||||
--------
|
||||
|
||||
### 基础
|
||||
### 一般形式
|
||||
|
||||
```python
|
||||
primes = [2, 3, 5, 7]
|
||||
@ -783,7 +788,7 @@ for prime in primes:
|
||||
print(prime)
|
||||
```
|
||||
|
||||
### 有索引
|
||||
### 带索引
|
||||
|
||||
```python
|
||||
animals = ["dog", "cat", "mouse"]
|
||||
@ -791,7 +796,7 @@ for i, value in enumerate(animals):
|
||||
print(i, value)
|
||||
```
|
||||
|
||||
### While
|
||||
### while 循环
|
||||
|
||||
```python
|
||||
x = 0
|
||||
@ -800,7 +805,7 @@ while x < 4:
|
||||
x += 1 # Shorthand for x = x + 1
|
||||
```
|
||||
|
||||
### Break
|
||||
### 跳出循环
|
||||
|
||||
```python
|
||||
x = 0
|
||||
@ -811,7 +816,7 @@ for index in range(10):
|
||||
print(x)
|
||||
```
|
||||
|
||||
### Continue
|
||||
### 跳过一轮循环
|
||||
|
||||
```python
|
||||
for index in range(3, 8):
|
||||
@ -821,7 +826,7 @@ for index in range(3, 8):
|
||||
print(x)
|
||||
```
|
||||
|
||||
### 范围
|
||||
### 范围循环
|
||||
|
||||
```python
|
||||
for i in range(4):
|
||||
@ -841,7 +846,7 @@ for n, a in zip(name, age):
|
||||
print('%s is %d years old' %(n, a))
|
||||
```
|
||||
|
||||
### 列表理解
|
||||
### 列表生成式
|
||||
<!--rehype:wrap-class=col-span-2-->
|
||||
|
||||
```python
|
||||
@ -937,13 +942,13 @@ print(ceil(3.7)) # => 4.0
|
||||
print(floor(3.7)) # => 3.0
|
||||
```
|
||||
|
||||
### 全部导入
|
||||
### 导入一个模块的全部
|
||||
|
||||
```python
|
||||
from math import *
|
||||
```
|
||||
|
||||
### 缩短模块
|
||||
### 给模块起别名
|
||||
|
||||
```python
|
||||
import math as m
|
||||
@ -951,7 +956,7 @@ import math as m
|
||||
math.sqrt(16) == m.sqrt(16)
|
||||
```
|
||||
|
||||
### 功能和属性
|
||||
### 浏览模块的函数和属性
|
||||
|
||||
```python
|
||||
import math
|
||||
@ -981,7 +986,7 @@ for i, line in enumerate(file, start=1):
|
||||
|
||||
### 字符串
|
||||
|
||||
#### 写一个字符串
|
||||
#### 写入一个字符串
|
||||
|
||||
```python
|
||||
contents = {"aa": 12, "bb": 21}
|
||||
@ -1042,12 +1047,12 @@ os.rmdir("myfolder")
|
||||
Python 类和继承
|
||||
--------
|
||||
|
||||
### Defining
|
||||
### 定义
|
||||
|
||||
```python
|
||||
class MyNewClass:
|
||||
pass
|
||||
# Class Instantiation
|
||||
# 类的实例化
|
||||
my = MyNewClass()
|
||||
```
|
||||
|
||||
@ -1091,7 +1096,7 @@ x = MyClass()
|
||||
print(x.class_variable)
|
||||
```
|
||||
|
||||
### Super() 函数
|
||||
### super() 函数
|
||||
<!--rehype:wrap-class=row-span-2-->
|
||||
|
||||
```python
|
||||
@ -1154,7 +1159,7 @@ obj_A.print_self() # => A
|
||||
obj_B.print_self() # => B
|
||||
```
|
||||
|
||||
### 覆盖
|
||||
### 重写
|
||||
|
||||
```python
|
||||
class ParentClass:
|
||||
@ -1187,7 +1192,7 @@ print(Yoki.legs) # => 4
|
||||
Yoki.sound() # => Woof!
|
||||
```
|
||||
|
||||
Python 类型标注 (自 Python 3.5 起)
|
||||
Python 类型标注 (Python 3.5+)
|
||||
--------
|
||||
|
||||
### 变量
|
||||
@ -1429,6 +1434,7 @@ finally: # 在所有情况下执行
|
||||
另见
|
||||
----
|
||||
|
||||
- [Python](https://www.python.org/) _(python.org)_
|
||||
- [Learn X in Y minutes](https://learnxinyminutes.com/docs/zh-cn/python-cn/) _(learnxinyminutes.com)_
|
||||
- [Regex in python](./regex.md#python-中的正则表达式) _(jaywcjlove.github.io)_
|
||||
- [Python 官方网站](https://www.python.org/) _(python.org)_
|
||||
- [Python 文档](https://docs.python.org/zh-cn/3/index.html) _(docs.python.org)_
|
||||
- [Y 分钟学会 Python](https://learnxinyminutes.com/docs/zh-cn/python-cn/) _(learnxinyminutes.com)_
|
||||
- [Python 中的正则表达式](./regex.md#python-中的正则表达式) _(jaywcjlove.github.io)_
|
||||
|
Loading…
x
Reference in New Issue
Block a user