# python3基础语法回顾

Source: https://blog.ferstar.org/posts/python3-core-syntax-refresher/






## python保留字
```python
import keyword
keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
```
## 注释
python中单行注释以#开头，多行注释用三个单引号或者三个双引号将注释括起来。
## 行与缩进
python最具特色的就是使用缩进来表示代码快。缩进的空格数是可以变化的，但同一代码块的语句必须包含同样的缩进空格数。
> 注：一般是4个空格一缩进

## 数据类型
python中数有四种类型：整数int、长整数、浮点数和复数
> 注：查看某一数据类型可以使用type(xxx)查看

## 字符串

python中单引号和双引号使用完全相同

使用三引号可以制定一个多行字符串

## 转义符 \ 

自然字符串，通过在字符串前加r或者R。

python允许处理unicode字符串，加前缀u或者U

字符串是不可变的。

按字面意思级联字符串，如"this" "is" "string"会被自动转换为this is string。



## python基本数据类型

python中变量不需要声明。每个变量在使用前必须赋值，变量赋值后才会被创建。

python中变量即是变量，没有类型。此处所说的类型是变量所在的内存中对象的类型。

### python3中有6个标准的数据类型：



1. Numbers    数字

    - 支持int、float、boot、complex复数

    - 数值运算： **+ 加法 - 减法 \*乘法 / 除法，得到浮点数 // 除法，得到一个整数，即取整 % 取余 ** 乘方**

    - python可以同时为多个变量赋值， 如a, b=1, 2

    - 一个变量可以通过赋值指向不同类型的对象

    - 混合计算时，python会把整形转换为浮点数

2. String    字符串

    python中的字符串str用单引号或者双引号括起来，同时使用反斜杠转义特殊字符。如果不想让反斜杠发生转义，可以在字符串前面添加一个r表示原始字符串

    另外反斜杠也可以作为续行符，表示下一行是上一行的延续，也可以使用'''   '''或"""   """跨越多行。

    字符串可以使用 + 运算符串连接在一起，或者使用 * 运算符重复：
    ```python
    print('str'+'ing', 'my'*3)
    string mymymy
    ```
    Python中的字符串有两种索引方式，第一种是从左往右，从0开始依次增加；第二种是从右往左，从-1开始依次减少
    > 注意，没有单独的字符类型，一个字符就是长度为1的字符串。

    还可以对字符串进行切片，获取一段子串。用冒号分隔两个索引，形式位变量[头下标:尾下标]。

    截取范围是前闭后开的，两个索引都可以省略

    python中的字符串不能被改变



3. List    列表

    List（列表） 是 Python 中使用最频繁的数据类型。

    列表是写在方括号之间、用逗号分隔开的元素列表。列表中元素的类型可以不相同：
    ```
    >>> a = ['him', 25, 100, 'her']
    >>> print(a)['him', 25, 100, 'her']
    ```

    和字符串一样，列表同样可以被索引和切片，列表被切片后返回一个包含所需元素的新列表。详细的在这里就不赘述了。

    列表还支持串联操作，使用+操作符：
    ```
    >>> a = [1, 2, 3, 4, 5]
    >>> a + [6, 7, 8][1, 2, 3, 4, 5, 6, 7, 8]
    ```

    与Python字符串不一样的是，列表中的元素是可以改变的：
    ```
    >>> a = [1, 2, 3, 4, 5, 6]
    >>> a[0] = 9
    >>> a[2:5] = [13, 14, 15]
    >>> a[9, 2, 13, 14, 15, 6]
    >>> a[2:5] = []   # 删除
    >>> a[9, 2, 6]
    ```
    List内置了有很多方法，例如append()、pop()等等，这在后面会讲到。

    注意：

    1. List写在方括号之间，元素用逗号隔开。
    2. 和字符串一样，list可以被索引和切片。
    3. List可以使用+操作符进行拼接。
    4. List中的元素是可以改变的。



4. Tuple    元组

    元组（tuple）与列表类似，不同之处在于元组的元素不能修改。元组写在小括号里，元素之间用逗号隔开。

    元组中的元素类型也可以不相同：
    ```
    >>> a = (1991, 2014, 'physics', 'math')
    >>> print(a, type(a), len(a))(1991, 2014, 'physics', 'math') <class 'tuple'> 4
    ```

    元组与字符串类似，可以被索引且下标索引从0开始，也可以进行截取/切片（看上面，这里不再赘述）。

    其实，可以把字符串看作一种特殊的元组。
    ```
    >>> tup = (1, 2, 3, 4, 5, 6)
    >>> print(tup[0], tup[1:5])1 (2, 3, 4, 5)
    >>> tup[0] = 11  # 修改元组元素的操作是非法的
    ```

    虽然tuple的元素不可改变，但它可以包含可变的对象，比如list列表。

    构造包含0个或1个元素的tuple是个特殊的问题，所以有一些额外的语法规则：

    tup1 = () # 空元组tup2 = (20,) # 一个元素，需要在元素后添加逗号

    另外，元组也支持用+操作符：
    ```
    >>> tup1, tup2 = (1, 2, 3), (4, 5, 6)
    >>> print(tup1+tup2)(1, 2, 3, 4, 5, 6)
    ```
    string、list和tuple都属于sequence（序列）。

    注意：

    1. 与字符串一样，元组的元素不能修改。
    2. 元组也可以被索引和切片，方法一样。
    3. 注意构造包含0或1个元素的元组的特殊语法规则。
    4. 元组也可以使用+操作符进行拼接。

    元组（tuple）与列表类似，不同之处在于元组的元素不能修改。元组写在小括号里，元素之间用逗号隔开。

    元组中的元素类型也可以不相同：
    ```
    >>> a = (1991, 2014, 'physics', 'math')
    >>> print(a, type(a), len(a))(1991, 2014, 'physics', 'math') <class 'tuple'> 4
    ```
    元组与字符串类似，可以被索引且下标索引从0开始，也可以进行截取/切片（看上面，这里不再赘述）。

    其实，可以把字符串看作一种特殊的元组。
    ```
    >>> tup = (1, 2, 3, 4, 5, 6)
    >>> print(tup[0], tup[1:5])1 (2, 3, 4, 5)>>> tup[0] = 11  # 修改元组元素的操作是非法的
    ```
    虽然tuple的元素不可改变，但它可以包含可变的对象，比如list列表。

    构造包含0个或1个元素的tuple是个特殊的问题，所以有一些额外的语法规则：

    tup1 = () # 空元组tup2 = (20,) # 一个元素，需要在元素后添加逗号

    另外，元组也支持用+操作符：
    ```
    >>> tup1, tup2 = (1, 2, 3), (4, 5, 6)
    >>> print(tup1+tup2)(1, 2, 3, 4, 5, 6)
    ```
    string、list和tuple都属于sequence（序列）。

    注意：

    1. 与字符串一样，元组的元素不能修改。
    2. 元组也可以被索引和切片，方法一样。
    3. 注意构造包含0或1个元素的元组的特殊语法规则。
    4. 元组也可以使用+操作符进行拼接。


5. Sets    集合

    集合（set）是一个无序不重复元素的集。

    基本功能是进行成员关系测试和消除重复元素。

    可以使用大括号 或者 set()函数创建set集合，注意：创建一个空集合必须用 set() 而不是 { }，因为{ }是用来创建一个空字典。
    ```
    >>> student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}
    >>> print(student)   # 重复的元素被自动去掉{'Jim', 'Jack', 'Mary', 'Tom', 'Rose'}
    >>> 'Rose' in student  # membership testing（成员测试）True
    >>> # set可以进行集合运算... 
    >>> a = set('abracadabra')
    >>> b = set('alacazam')
    >>> a{'a', 'b', 'c', 'd', 'r'}
    >>> a - b     # a和b的差集{'b', 'd', 'r'}
    >>> a | b     # a和b的并集{'l', 'm', 'a', 'b', 'c', 'd', 'z', 'r'}
    >>> a & b     # a和b的交集{'a', 'c'}>>> a ^ b     # a和b中不同时存在的元素{'l', 'm', 'b', 'd', 'z', 'r'}
    ```


6. Dictionaries    字典

    字典（dictionary）是Python中另一个非常有用的内置数据类型。

    字典是一种映射类型（mapping type），它是一个无序的键 : 值对集合。

    关键字必须使用不可变类型，也就是说list和包含可变类型的tuple不能做关键字。

    在同一个字典中，关键字还必须互不相同。
    ```
    >>> dic = {}  # 创建空字典
    >>> tel = {'Jack':1557, 'Tom':1320, 'Rose':1886}
    >>> tel{'Tom': 1320, 'Jack': 1557, 'Rose': 1886}
    >>> tel['Jack']   # 主要的操作：通过key查询1557
    >>> del tel['Rose']  # 删除一个键值对
    >>> tel['Mary'] = 4127  # 添加一个键值对
    >>> tel{'Tom': 1320, 'Jack': 1557, 'Mary': 4127}
    >>> list(tel.keys())  # 返回所有key组成的list['Tom', 'Jack', 'Mary']
    >>> sorted(tel.keys()) # 按key排序['Jack', 'Mary', 'Tom']
    >>> 'Tom' in tel       # 成员测试True
    >>> 'Mary' not in tel  # 成员测试False
    ```
    构造函数 dict() 直接从键值对sequence中构建字典，当然也可以进行推导，如下：
    ```
    >>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)]){'jack': 4098, 'sape': 4139, 'guido': 4127}
    >>> {x: x**2 for x in (2, 4, 6)}{2: 4, 4: 16, 6: 36}
    >>> dict(sape=4139, guido=4127, jack=4098){'jack': 4098, 'sape': 4139, 'guido': 4127}
    ```
    另外，字典类型也有一些内置的函数，例如clear()、keys()、values()等。

    注意：

    1. 字典是一种映射类型，它的元素是键值对。
    2. 字典的关键字必须为不可变类型，且不能重复。
    3. 创建空字典使用{}。



## python交换变量

可以通过临时变量交换也可以用一种优雅的方式x, y = y, x


## 九九乘法表
```python
for i in range(1, 10):
        for j in range(1, i+1):
            print('{}x{}={}\t'.format(i, j, i*j), end='')
        print()
```
代码结果
```shell
1x1=1
2x1=2   2x2=4
3x1=3   3x2=6   3x3=9
4x1=4   4x2=8   4x3=12  4x4=16
5x1=5   5x2=10  5x3=15  5x4=20  5x5=25
6x1=6   6x2=12  6x3=18  6x4=24  6x5=30  6x6=36
7x1=7   7x2=14  7x3=21  7x4=28  7x5=35  7x6=42  7x7=49
8x1=8   8x2=16  8x3=24  8x4=32  8x5=40  8x6=48  8x7=56  8x8=64
9x1=9   9x2=18  9x3=27  9x4=36  9x5=45  9x6=54  9x7=63  9x8=72  9x9=81
```




