从AcWing - Django课程精简学习
学习经验:边学边查,先把常用的通读一遍即可
Python官方教程 5. 数据结构(python3大数据结构:列表,集合,字典)
5.1 列表5.2 元组5.3 集合5.4 字典5.5 循环的技巧 6. 模块7. 输入与输出
7.1 格式化输出7.2. 读写文件 8. 异常处理9. 类
5. 数据结构(python3大数据结构:列表,集合,字典) 5.1 列表就是数组,但是类型可以不一样
常用函数:
list.append(x) len(list)
列表推导式
squares = [x**2 for x in range(10)] [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
二维数组
>>> matrix = [ ... [1, 2, 3, 4], ... [5, 6, 7, 8], ... [9, 10, 11, 12], ... ]5.2 元组
类似列表,就是不能改,定义的时候可以不用()
In [13]: t = (1, 2, 3) In [14]: t[0]= 4 --------------------------------------------------------------------------- TypeError Traceback (most recent call last)in ----> 1 t[0]= 4 TypeError: 'tuple' object does not support item assignment In [15]: t = 1, 2, 3 In [16]: t Out[16]: (1, 2, 3)
元组打包和序列解包,用来交换便捷
序列解包
Python 还支持 集合 这种数据类型。集合是由不重复元素组成的无序容器。对应C++的set。基本用法包括成员检测、消除重复元素。集合对象支持合集、交集、差集、对称差分等数学运算。
创建集合用花括号或 set() 函数。注意,创建空集合只能用 set(),不能用 {},{} 创建的是空字典,下一小节介绍数据结构:字典。
以下是一些简单的示例
>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket) # show that duplicates have been removed
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket # fast membership testing
True
>>> 'crabgrass' in basket
False
>>> # Demonstrate set operations on unique letters from two words
...
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a # unique letters in a
{'a', 'r', 'b', 'c', 'd'}
>>> a - b # letters in a but not in b
{'r', 'd', 'b'}
>>> a | b # letters in a or b or both
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b # letters in both a and b
{'a', 'c'}
>>> a ^ b # letters in a or b but not both
{'r', 'd', 'b', 'm', 'z', 'l'}
5.4 字典
>>> tel = {'jack': 4098, 'sape': 4139}
>>> tel['guido'] = 4127
>>> tel
{'jack': 4098, 'sape': 4139, 'guido': 4127}
5.5 循环的技巧
翻转reversed()和排序sorted() 函数
Python已经实现了很多包,直接安装调用即可
在处理文件对象时,最好使用 with 关键字。优点是,子句体结束后,文件会正确关闭,即便触发异常也可以。而且,使用 with 相比等效的 try-finally 代码块要简短得多:
写
>>> with open('workfile') as f:
... read_data = f.read()
>>> # We can check that the file has been automatically closed.
>>> f.closed
True
读
>>> def divide(x, y):
... try:
... result = x / y
... except ZeroDivisionError:
... print("division by zero!")
... else:
... print("result is", result)
... finally:
... print("executing finally clause")
...
>>> divide(2, 1)
result is 2.0
executing finally clause
>>> divide(2, 0)
division by zero!
executing finally clause
>>> divide("2", "1")
executing finally clause
Traceback (most recent call last):
File "", line 1, in
File "", line 3, in divide
TypeError: unsupported operand type(s) for /: 'str' and 'str'
如上所示,任何情况下都会执行 finally 子句。except 子句不处理两个字符串相除触发的 TypeError,因此会在 finally 子句执行后被重新触发。
在实际应用程序中,finally 子句对于释放外部资源(例如文件或者网络连接)非常有用,无论是否成功使用资源。
9. 类构造函数,构造函数也可以传参数,甚至可以关键字对应,解包操作
定义成员函数
继承,调用基类的构造函数



