-
简介
- 发音:[ 'paiθ(ə)n; (US) 'paiθɔn ]
- 解释型
- 交互性
- 动态类型
- 强类型
-
面向对象
- 便于复用、设计
-
python基础
-
万物皆对象@python
- 程序有模块构成
- 模块有语句组成
- 语句有表达式构成
- 表达式是用来创建处理对象的
-
python 对象
-
标准类型
-
数字
- int
- oct()
- hex()
- chr()
- ord()
- long
- boolean
- complex
- real
- imag
- conjugate()
- float
- 功能函数
- abs
- coerce
- divmod
- pow
- round
- random module
- string
-
list
- stack
- append()
- pop()
- queues
- deque
- collections
- append()
- popleft()
- tuple
- dict
-
其他内建类型
- type
- None
- file
- set/frozen set
- function/method
- module
- class
-
内部类型
- 代码
- 帧
- 跟踪记录
- 切边
- 省略
- Xrange
-
标准的内建函数
- cmp
- type
- repr
- str
- dir
- id
-
工厂方法/函数
- int
- long
- float
- complex
- str
- unicode
- list
- tuple
- dict
- set
- bool
- set
- frozenset
- ------------------
- super
- property
- file
- object
- classmethod
- staticmethod
-
与序列有关的BIF
- sorted
-
reversed
- 返回的是个反向序列迭代器
- enumerate
- zip
-
迭代器
- iter()
- obj.next()
-
支持迭代协议
- __iter__()
- next()
-
iterable的对象
- list
- tuple
- generator
- list comprehension
-
支持迭代协议对象
- file object / like file object
-
特性
- 单向性
- 不可复制性
-
一个迭代实例只会迭代一次
- 单向性决定的犹如时间
- 如过要反复用到某个集个反复实例迭代对象
- 直接用序列 等类型
-
生成器
-
生成器表达式
- (e for e in data)
- yield 语句
-
使用场合
- 迭代巨大的数据集合
- 从A处获取数据处理后存入B处(允许A=B)
-
优点
- 动态的生成一个对象
- 提高内存性能
-
高级扩展
- send()
- close()
- 根据相应的逻辑动态生成
-
列表解析
-
左延伸
- [[y for y in range(10)] for x in range(10)]
-
右延伸
- [(x, y) for x in range(10) for y in range(10) ]
-
文件对象
-
打开
- open
- file
-
输入
- read
- readline
-
readlines
- read them all from file to list
-
输出
- write
-
writelines
- write all in list to file
-
文件内的移动
-
seek
- 0
- default set
- 1
- current
- 2
- end
- tell
- text
-
杂项操作
- flush
- fileno
-
关闭
- close
-
文件属性
- closed
- encoding
- mode
- newlines
-
其他
-
os
- linesep
- sep
- pathsep
- curdir
- pardir
-
sys
- stderr
- stdin
- stdout
- argv
-
序列化
- pickle/cPickle
- json
-
异常
-
异常的类型
- BaseException
- Exception
- StopIteration
- ImportError
- ValueError
- TypeError
- AttributeError
- IndexError
- KeyError
- NameError
- 异常的处理
-
with语句
-
应用场合
- 文件
- 线程资源
- 简单同步
- 数据库
- 仅对支持上下文协议
-
异常的抛出
- raise
-
断言
- assert
-
函数
-
形式参数
- 位置参数
- 默认参数
-
可变长参数
- 非关键字
- 关键字
-
函数式编程(FP)
- filter
- reduce
- map
- lambda
-
偏函数(PFA)
- from functools import partial
-
partial
- functools
- 功能
- 类的部分实例化
- 函数部分形实结合
- func
- args....
-
装饰器
- 加入日记
- 加入事务处理
-
模块
-
名称空间
-
内建空间
- __builtins__
-
全局空间
- globals()检查
-
局部空间
- locals()检查
- 函数
- 类
- 实例
-
OOP
-
类
-
类属性
- 特殊
- __name__
- __doc__
- __bases__
- __dict__
- __module__
- __class__
-
实例
-
实例属性
- 特殊
- __class__
- __dict__
- 绑定
-
类方法
- classmethod()
- cls
-
静态方法
- staticmethod()
- 组合
-
派生
- super(C, self)
-
从标准类派生
- 不可变
- 可变
-
内建函数
-
issubclass
- issubclass与isinstance的第二个参数都可以是个元组
- isinstance
- -------------------
- hasattr
- getattr
- setattr
- delattr
- -------------------
- super
- dir
- vars
- id
- 用特殊方法来定制类
-
描述符/特性对象
-
property
- fget
- fset
- fdel
- doc
-
discriptor
- __get__
- self
- obj
- type(cls)
- __set__
- self
- obj
- value
- __delete__
- self
- obj
-
元类
- __metaclass__
-
类/实例属性的方法特性
-
__getattr__
- 在名字字典中没有才会去执行
-
__setattr__
- 小心死循环
- object.__setattr__
- __delattr__
-
__slots__
- 确保你只能访问那些属性
- 描述符
- property
-
执行环境
-
可调用对象(callable)
-
函数
- 内建函数(BIF)
- 用户自定义函数(UDF)
- lambda
-
方法
- 内建方法(BIM)
- 用户自定义方法(UDM)
- 类
-
部分实例
- 定义类时实现了__call__方法
-
代码对象
-
组成
- 语句
- 赋值
- 表达式
- 其他可调用对象
- 函数对象仅是代码对象的包装
- 方法是对函数对象的包装
-
可执行对象(executable)
-
内建函数和语句
- callable()
- complile()
- eval()
- exec
-
执行外部程序
-
subprocess
- call()
- Popen
- PIPE
-
ORM
- storm
- django ORM
- SQLAlchemy
-
Python Module
-
re
-
regex object
- compile()
-
Flag
- S
- I
- L
- M
- X
- U
-
match object
- match()
- search()
- findall()
- finditer()
- ==========
- sub()
- subn()
- split()
- =========
- group()
- groups()
- start()
- end()
- span()
-
os
-
linesep
- 行结束标记(新行符)
-
sep
- 路径中各级目录的分隔符
-
pathsep
- 路径与路径的分隔符
-
curdir
- 一般是"."
-
pardir
- 一般是“..”
-
getcwd()
- 获得当前工作目录
-
path
- basename()
- dirname()
- abspath()
- join()
-
sys
- stderr
- stdin
- stdout
- argv
- exit()
- datetime
-
subprocess
-
call
-
['ls', '-a', '/tmp']
- Win32 加上shell=True
-
"ls -a /tmp"
- shell=True
- 返回状态码
-
check_call
- 状态非0则抛出CalledProcessError
-
Popen
-
poll()
- Check if child process has terminated. Set and return returncode attribute.
-
wait()
- Wait for child process to terminate. Set and return returncode attribute
-
communicate()
- input=None
- send data to stdin.PS:stdin=PIPE
- returns a tuple (stdoutdata, stderrdata)
- read data from stdout and stderr.PS:stderr=PIPE, stdout=PIPE
-
send_signal()
- signal
- terminate()
- kill()
-
属性
- stdin
- stdout
- stderr
- pid
- returncode
-
PIPE
- stdin
- stdout
- stderr
-
STDOUT
- stderr
-
异常
- CalledProcessError
- ValueError
- OSError
-
辅助的模块
-
shlex
- split()
-
cStringIO/StringIO
-
StringIO
- 无初始值
- 有初始值
- getvalue
- close
- like file object
- unittest
-
PIL
- Image
-
BIF/M/FM
-
unicode
- string
- encoding
-
errors
- "strict"
- "replace"
- "ignore"
- unichr
-
FP
-
基本的概念
- 函数是第一类(对象)
- 将递归用作主要的控制结构
- “纯”函数语言能够避免副作用
- FP 不鼓励或根本不允许出现 语句,取而代之是使用表达式求值
- FP 关心的是计算什么而不是如何计算
- 许多 FP 利用了“更高等级”函数
-
柯里化(currying)
- lambda闭包实现
- lambda演算(lambda caculus)
-
怎样整出“纯”函数
- 通过闭包封装状态
- 一个函数被认为是捕获模式的机制
-
经验总结
-
性能
-
正则匹配
-
先编译后使用
- 当不止使用一到两次时
-
切勿重复编译
- 放入全局空间
- 放入cell空间并实例出一个闭包实例
- 学会用生成器
-
句法
-
“短路”实现分支语句时的歧义
-
请使用()
- 同时也方便看代码
- 不要使用from module import *除非非常适合的情况下
- try语句块中不要return
-
None与空值对象'', [], set(), {}, ()差异
- None是NoneType无类型即除了对象的特殊方法无任何方法
- 空值对象有类型且具有相应下的方法和属性
-
FP相关
-
如何处理FP或列表解析过长
-
分行处理
- 字典:每个键值对一行
-
如何处理FP中过多使用lambda实现常规运算
- 使用operator模块
-
如何处理一复杂表达式在一句中多次不引用
-
(lambda x, y: do_something_expression with x, y)(make_x_expression, make_y_expression)
- 结果就是lambda执行后的结果
- make_x/y_expression都是较复杂的表达式
- 风格
-
问题归纳
-
不可变性
-
元组的不可变性的理解
- 破坏不可变性
- 元素的增加和减少
- 元素次序的改变
- 直接引用的改变
-
自由变量不可变性
- 可能是描述器实现
- 描述器设置为只读
- 类似于名字不可变
-
闭包
- 对象是附带过程的数据,闭包是附带数据的过程。
- 闭包是由函数和与其相关的引用环境组合而成的实体
- 闭包类似于类的实例
- 类和实例---闭包源和闭包
- 闭包是函数
- 闭包封装的状态可以是个函数
-
条件
- 函数是first class
- 函数可以嵌套定义
- 可捕获引用环境
-
应用
- 模拟面向对象
- GUI回调函数
- 事件驱动编程
- 获取数据库行和处理数据
-
func_closure
- 追踪自由变量
-
python中自由变量的不可变性
- 可能描述器实现
-
可调用实例
- 实现__call__
-
与不可变实例的比较
- “人工”的调用方法
-
有__call__统一“自动”调用
- 类似于框架模式中的框架类
-
序列、迭代与生成器
-
序列
- 人工取货的仓库
-
处理生存这样的序列
- 来至内存模型
- 文件系统
- 数据库
- 网络
- 内存存在着这样的序列(list, tuple, str)
- 下标的方式随机访问
- 可变对象(list)的修改
-
迭代器
- 自动化的仓库
- 通过iter序列或其他方式实例化出可迭代对象
- 单向的次序访问
- 只可访问
-
生成器
- 无仓库
-
动态的生成对象
- 来至内存模型
- 文件系统
- 数据库
- 网络
- 单向的访问一次性使用
-
对迭代器和生成器使用in操作,会迭代查找
- 要查找的元素不在其中,将会迭代完全部元素(无限迭代)
- 要查找的元素在其中,则迭代到对应的第一个元素
-
PFA与currying
-
currying通过闭包实现的
- 使用funcwant = fucname(arg1)(arg2,arg3)()
- 一层调用用掉全部参数(默认值参数可当已有值)
-
PFA是用parital(不知如何实现)
- 更泛化
- 部分的实例化
- 部分的形实结合
-
一般函数与lambda
-
一般函数
- 函数是对一个代码对象的包装
- 函数是把代码块包装成可调用对象
- 自身是个函数定义语句
-
返回值
- return 语句指定
- 默认是None
-
定义/包装过程
- 通过def func():语句
- 在堆中生成一个函数对象
- 将引用给名字func
-
lambda
- lambda是对表达式的包装
- lambda是把表达式包装成可调用对象
- 自身是个表达式
-
“返回”值
- 就是执行了表达式后的结果
- 默认是表达式结果
- 没有也不可能有return这玩意
-
定义/装过程
- lambda关键字
- 在堆中生成一个lambda可调用对象
- 无名字(当然可人工指定)
-
学习难度
- 简单易学
- 易学难精
-
为什么使用
- 软件质量
- 开发者效率
- 程序的可移植性
- 标准库的支持
- 组建集成
- happy
-
能做什么
-
网络
-
twisted
- framework
-
web
-
zope/plone
- framework
- django
- web.py
- 其它
- smtp
- ftp
-
RPC
- XML-RPC
- REST
- SOAP
- 游戏
- 快速原型
- 系统编程
- 科学计算
- 人工智能
- GUI
- 数据库编程
- 其它
-
谁在使用
- Google
- YouTube
-
NASA、JPL
- zope
- IronPort
- IRobot
- Pxiar
-
优点
- 简洁
- 一致性
-
易学、易读
- 便于维护
-
广泛强大的库支持
-
unitTest
- TDD佳品
- ……
- pygame