《Python 可以这样学》
如何学习Python
- 一定要动手编写和调试书上的代码,踏踏实实把基础掌握好再有针对性地学习自己需要的扩展库,切忌只看不练。
- 多看,多想,多交流。
- 理解的越多,需要记忆的就越少。
- 切不可把全部精力放在 Python 语言本身的学习上,而是要把主要精力放到自己的专业和知识学习上,最终再用 Python 把自己的思想或算法准确地表达出来。
Python 基础
Python 是一种什么样的语言
- 当较新的 Python 版本推出之后,不要急于赶时髦,看到别人用高版本的 Python 也不用自卑,而是应该在确定自己必须使用的扩展库也推出了与之匹配的新版本之后再一起进行更新。
Python 开发环境
- 一般来说,建议在运算符两侧和逗号后面加一个空格,在不同功能的代码块之间增加一个空行。
- 交互模式一般用来实现一些简单的业务逻辑,或者验证某些功能。
- Python 文件扩展名为
.py
,GUI 程序可以保存为.pyw
- 为提高代码运行速度,同时也对 Python 源代码进行保密,可以在命令提示符环境中使用
python -OO -m py_compile file.py
将 Python 程序file.py
伪编译成为.pyc
文件。 - 命令提示符
cls
清屏。
变量、运算符与表达式
-
标准库是 Python 默认安装的,但需要导入后才能使用其中的对象。扩展库则需要手动安装,然后导入之后才能使用其中的对象。
-
不需要事先声明变量名及其类型,并且变量的类型是可以随时发生改变的。
-
Python 字符串对象提供了一个方法
isidentifier()
可以用来判断指定字符串是否可以作为变量名、函数名、类名等标识符。 -
Python 内置对象
- 数字
- 字符串
- 列表
- 字典
- 元组
- 文件
f = open(file.txt)
- 集合
set('abc'),{'a', 'b', 'c'}
- 布尔型
True,False
- 空
None
- 编程单元
函数(def),类(class)
-
可以通过内置函数
help()
查看某个函数的使用帮助。 -
可以导入 sys 模块后使用
print(sys.builtin_moudle_names)
查看 Python 所有内置模块名称。 -
可以使用
help('moudles')
查看本机所有可用模块的名称。 -
Python 常用内置函数
-
进制转换
-
bin()
二进制 -
oct()
八进制 -
int()
十进制 -
hex()
十六进制
-
-
Unicode
-
ord()
字符串转为 Unicode -
chr()
Unicode 转为字符串
-
-
变量类型转换
bool()
float()
int()
str()
-
计算
-
abs()
返回绝对值或复数的模 max()
min()
sum()
-
-
其他
-
help()
查看指定方法的使用帮助 dir()
-
-
查看对象的所有成员
- `dir(math)` 查看模块中可用对象
- `dir('')` 查看字符串类型成员
- `dir(3+4j)` 查看复数类型成员
- `type(3)` 查看类型
- `isinstance(3, init)` 判断类型
- `import this` Python 之禅
-
Python 运算符
-
+
加法,列表、元组、字符串合并 -
-
减法,集合差集 -
*
乘法,序列重复 -
/
真除法 -
//
整商 -
-
相反数 -
%
余数,字符串格式化 -
**
幂 -
<
<=
>
>=
大小比较,集合的包含关系比较 -
==
!=
相等、不等比较 -
or
and
not
或,与,非 -
in
not in
成员测试 -
&
|
^
集合的交集、并集、对称差集 -
@
矩阵相乘
-
-
print(value, ..., sep='', end='\n', file=sys.stout, flush=False)
-
sep
指定数据之间的分隔符,默认为空格。 -
file
参数用于指定输出位置,默认为标准控制台,也可以重定向输出到文件。
-
模块的安装和使用
- 常用 pip 命令
-
pip install Package
安装模块 -
pip list
列出已安装的所有模块 -
pip install -upgrade Package
升级模块 -
pip uninstall Package
卸载模块
-
- pip 可执行程序在 Python 安装目录的 Scripts 文件夹下。
Python 序列
列表与列表推导式
-
可以用
list()
函数将元组、range 对象、字符串、字典、集合或其他类型的可迭代对象类型的数据转换为列表。需要注意的是,把字典转换为列表时默认是将字典的“键”转换为列表,如果想把字典的元素转换为列表,需要使用字典对象的items()
方法明确说明。>>> list({'a':3, 'b':9, 'c':78}) ['a', 'b', 'c'] >>> list({'a':3, 'b':9, 'c':78}.items()) [('a', 3), ('b', 9), ('c', 78)]
-
工厂函数:
list()
,tuple()
,set()
,dict()
。 -
可以使用
del
将对象删除,适用于所有的 Python 对象。也可以用del
命令删除可变序列中的部分元素。>>> a = [1, 2, 3] >>> del a[0] >>> a [2, 3]
-
常用的列表对象方法
-
list.list.append(x)
将元素 x 添加至列表 list 尾部 -
list.extend(L)
将列表 L 中的所有元素添加至列表 list 尾部 -
list.insert()
在列表指定位置插入元素 -
list.remove()
删除在列表中首次出现的元素 -
list.pop(x)
删除并返回下标为 x 的元素,x 默认为-1 -
list.clear()
删除列表中的所有元素 -
list.index(x)
返回列表中第一个值为 x 的元素的下标 -
list.count()
返回指定元素在列表中出现的次数 -
list.reverse()
倒序 list.sort(key=None, reverse=False)
-
排序
- `sort()`和`reverse()`是对列表进行原地排序。如果不想丢掉原来的顺序可以用内置函数`sorted()`和 `reversed()`。
-
list.copy()
浅复制 -
成员测试运算符
in
也可以测试列表中是否存在某个元素。 -
zip()
函数用于将多个列表中元素重新组合为元组并返回包含这些元组的 zip 对象。>>> x = list(range(5)) >>> x [0, 1, 2, 3, 4] >>> list(zip(x, [0]*5)) [(0, 0), (1, 0), (2, 0), (3, 0), (4, 0)]
-
enumerate()
函数返回包含若干下标和值的迭代对象。>>> list(enumerate(x)) [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
-
map()
可以将一个函数依次作用到一个序列上,并返回一个 map 对象作为结果。>>> def add5(v): ... return v+5 ... >>> add5(1) 6 >>> list(map(add5, range(5))) [5, 6, 7, 8, 9] >>>
-
filter()
将一个单参数函数作用到一个序列上,返回该序列中使得该函数返回值为 True 的那些元素组成的 filter 对象,如果指定函数为 None,则返回序列中等价于 True 的元素。 -
[表达式 for 变量 in 序列或迭代对象]
列表推导式在逻辑上相当于一个循环,只是形式更加简洁。>>> [x*x for x in range(10)] [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
-
切片返回的是列表元素的浅复制,与列表对象的直接辅助并不一样。
元组与生成器推导式
-
元组是不可变序列。
-
生成器推导式的结果是一个生成器对象,不是列表,也不是元组。可以根据需要将其转化为元组或列表,也可以使用生成器对象的
__next__()
方法或者内置函数
next()
进行遍历,或者直接将其作为迭代器对象来使用。当所有元素访问结束以后,如果需要访重新问其中的元素,必须重新创建该生成器对象。
>>> g = (i*i for i in range(10)) # 返回的是生成器对象 >>> g <generator object <genexpr> at 0x00000158DCB9A620> # 转为元组 >>> tuple(g) (0, 1, 4, 9, 16, 25, 36, 49, 64, 81) # 生成器对象已遍历结束,没有元素了 >>> list(g) [] # 重新生成 >>> g = (i*i for i in range(10)) >>> g.__next__() 0 >>> next(g) 1
字典
-
字典中的键不允许重复,值可以重复。
-
dict()
可以通过已有数据创建字典。>>> keys = ['a', 'b', 'c'] >>> values = [1, 2, 3] >>> dictionary = dict(zip(keys, values)) >>> dictionary {'a': 1, 'b': 2, 'c': 3}
-
dict()
可以根据给定的“键:值”来创建字典。>>> dict(name='Cat', age=5) {'name': 'Cat', 'age': 5}
-
dict()
可以给定键,创建值为空的字典。>>> dict.fromkeys(['name', 'age']) {'name': None, 'age': None}
-
dict.update()
将 B 字典的键值对都添加到 A 字典,如果有键重复会用 B 字典的值覆盖。 -
dict.get()
返回字典里指定键的值,如果键不存在返回指定值。 -
dict.setdefault()
返回指定键对应的值,不过不存在就添加一个键并设置对应值。 -
内置函数
globals()
和locals()
分别返回包含当前作用域内所有全局变量和局部变量的名称及值的字典。 -
其他对象方法参考 list。
集合
- 同一个集合内每一个元素都是唯一的,不允许重复。
-
set()
将可迭代对象转为集合,如果有重复值则只保留一个。 - 集合只能包含数字、字符串、元组等不可变类型(或者说可哈希)的数据。
-
set.add()
添加新元素,如果已存在则忽略。 -
set.update()
合并集合。 -
set.pop()
随机删除并返回一个元素。 -
set.remove()
删除指定元素,如果不存在则报错。 -
set.discard()
删除指定元素,如果不存在则忽略。 - 其他对象方法参考 list。
序列解包
-
可以使用序列解包功能对多个变量同时赋值。
x, y, z = 1, 2, 3
-
很方便地同时遍历多个序列
keys = ['a', 'b', 'c'] values = [1, 2, 3] for k, v in zip(keys, values): print(k, v)
-
其他
>>> print(* [1, 2, 3], 4, * (5, 6)) 1 2 3 4 5 6