Python notes
1. Overview
python,本文主要介绍变量类型(数据结构、函数、类)、变量之间关系(赋值、比较、作用域等)
- 程序 = {模块}
- 模块 = {表达式,自定义对象类型(类或者函数)}
表达式 = {建立处理对象,建立处理对象...}
对象/变量 - 所有的东西都是对象,对象帮你处理内存分配等问题。
2. DataStructure
overview
2.1. none type
Def:
## number
2.2. string
2.3. list
2.3.1. append while looping
2.4. iterator
Def: 迭代器是存在 next 方法的类,可迭代对象是存在迭代器的类。
- Note: list不是迭代器,但是是可迭代对象,但是可以生成一个迭代器去迭代它,文件类型本身是迭代器。for 循环会调用iter(a)生成迭代器,然后用next(函数)调用迭代器本身的next函数,所以在遍历中append也是可以的,append会加一个next。
Note: list(iter) 可以生成一个列表
2.4.1. 列表解析
Def:
2.4.2. 其他可迭代对象
Def:map, 输入一个函数,一个iter,返回一个iter。
Def: 其他iter
Def: 其他可应用于可迭代对象的函数
2.4.3. 多个迭代器
Def:有些支持不同迭代器可以独立迭代,有些不支持。
3. Function
3.1. compiling sequence
Def:
python中都是实时运行,没有什么编译时之类的,def func()就是定义一个函数。
3.2. 多态
Def:
3.3. parameter passing
Def:修改传进的可变参数时,会对外部对象产生影响,修改不可变参数时则不会影响。参数默认值是在函数定义时确定,所以一定要注意不要设置为一个可变对象,如果是可变的话,每次都会默认使用它。
4. Class(oop)
5. Variable
python对象之间的关系和性质。
5.1. variable & object
Def:
简而言之,变量是指针,对象是实物。(对比c++,都是实物)用is判断是否指向同一个对象,用==判断值是否相同
5.2. assignment
Def:
5.3. copy
Def:
针对可变类型可以修改内部内容,针对不可变类型是换一个新的
5.4. compare
Def;
Def: true & false
5.5. affect field
Def: affect field
5.5.1. LEGB principle
Def: 最重要的是第二条,只会改变本地变量,除非声明了global。回顾a = a+1 的例子,就知道为什么不改变a了。
Note: global
Note: 其他global方法
5.5.2. module
Def:模块可以理解为namespace
Note: 模块会在被提及(from/import)的时候全部执行,并且把顶层的语句作为属性供别人导入,通过dir/dict获取,dict是存在。
5.5.2.1. import
Def: 注意第三条,如果倒入py会全部执行一遍
Note: 导入的元素是否是引用?
import 和 from是赋值语句。也就是说,你这边这个文件引用了别人的可变变量然后修改了,别人也会变的。
或者你直接用模块.变量的写法,也会修改
Note:作用域?导入操作不影响作用域,比如a.f()如果是被导入的,那么f不会看到导入者的信息。如果导入的是模块,可以用.访问,如果导入的是东西,重名会覆盖(导入是赋值语句,按顺序覆盖)
Def: 去哪里找import?sys.path
Def: from * 引入了那些?
5.5.2.2. package
Def: 包是模块的集合,也就是文件夹,如果要导入文件夹的话必须包含__init,且文件夹上层目录在path中。
- Note: 由于模块包是一个虚拟的东西,所以要定义会放在init文件中
6. useful wheels
6.1. generator
- Def: 生成器是一个特殊的对象,可以表现的像列表但不会一下子占用很多的资源而是一个一个来。好处在于不需要一下去获取所有的列表值的时候就可以用生成器一个一个获取。
- 生成器就是一个特殊的迭代器,有__next函数,简单来说就是实现迭代器的一种简单方式。
Def: 迭代器:一个实现了iter方法的对象时可迭代的,一个实现next方法的对象是迭代器
生成器都是
Iterator
对象。for 循环调用的是for j in iter(i). 然后 iter(i)调用的是__next__。
- __iter 有这个函数的是可叠戴的
- __next 有这个函数的是迭代器。
6.2. OS
6.2.1. methods
- 最外层模块的地址
- os.getcwd()
- 解释:a调用b,在a中运行得到的是a的地址。
- os.getcwd()
- 最后运行模块的地址
- os.path.realpath(file) =
- 解释:a调用b,在a中巡行得到的是b的地址
- 实际项目:sys.path.append('%s/../s2v_lib'%os.path.dirname(os.path.realpath(file)))
- os.path.realpath(file) =
- 最后运行模块的地址前一项
- os.path.dirname = xx
- 地址是调用main.py所名下的地址
6.3. PIL
6.3.1. shape
read: 3 224 224 rgb
plt.imshow : 224 224 3
pil from array 224 224 3
6.4. matplotlib
- 起到切换作用
- plt.figure(1)
- 切换到figure 1子图
- 切换到figure 1子图
- plt.subplot(212)
- 仍旧是当前图
- plt.figure(1)
- 标题
- plt.title('z=xy')
画图板的缺省是:figure(1)
图形区的缺省是:subplot(111)
就近原则 就近原则:在每个函数操作时对上一层资源的依赖遵守最近原则,举例如下:
subplot()作用在最近使用的画图板上,有可能是缺省的画图板figure(1)。
axes()作用在最近使用的画图板上,有可能是缺省的画图板figure(1)。
axis()作用在最近使用的图形区上,可能来自subplot、axes等
plot()作用在最近使用的图形区上,可能来自subplot、axes等
6.5. setuptools
setuptools是Python distutils增强版的集合,它可以帮助我们更简单的创建和分发Python包,尤其是拥有依赖关系的。用户在使用setuptools创建的包时,并不需要已安装setuptools,只要一个启动模块即可。 简单来说,打包一个package。