feeling-python
简介
发音:[ 'paiθ(ə)n; (US) 'paiθɔn ]
解释型
交互性
动态类型
强类型
面向对象
便于复用、设计
学习难度
简单易学
易学难精
为什么使用
软件质量
Python 注重可读性、一致性、软件质量,毕竟写程序是为了以后修改的,当你写下代码时你就应该想到几个月后就有人来修改,也许那个人就是你。
开发者效率
程序的可移植性
标准库的支持
组建集成
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
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
append()
popleft()
collections
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)
优点
动态的生成一个对象
提高内存性能
高级扩展
def counter(start_at=0):
count = start_at
while True:
val = (yield count)
if val is not None:
count = val
else:
count += 1
>>> count = counter(5)...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
异常
异常的类型
异常名称 描述
BaseExceptiona 所有异常的基类
SystemExitb python 解释器请求退出
KeyboardInterruptc 用户中断执行(通常是输入^C)
Exceptiond 常规错误的基类
StopIteratione 迭代器没有更多的值
GeneratorExita 生成器(generator)发生异常来通知退出
SystemExith Python 解释器请求退出
StandardErrorg 所有的内建标准异常的基类
ArithmeticErrord 所有数值计算错误的基类...BaseException
Exception
StopIteration
ImportError
ValueError
TypeError
AttributeError
IndexError
KeyError
NameError
异常的处理
try:
try_suite
except Exception1:
suite_for_Exception1
except (Exception2, Exception3,Exception4):
suite_for_Exceptions_2_3_and_4
except Exception5, Argument5:
suite_for_Exception5_plus_argument
except (Exception6, Exception7), Argument67:
suite_for_Exceptions6_and_7_plus_argument...with语句
with open('/etc/passwd', 'r') as f:
for eachLine in f:
# ...do stuff with eachLine or f...应用场合
文件
线程资源
简单同步
数据库
仅对支持上下文协议
异常的抛出
raise
raise [exclass[,args]]
断言
assert
assert expression[,args]
函数
形式参数
位置参数
默认参数
可变长参数
非关键字
关键字
函数式编程(FP)
filter
reduce
map
lambda
偏函数(PFA)
from functools import partial
partial
功能
类的部分实例化
函数部分形实结合
func
args....
functools
装饰器
无参装饰器
def deco(func):
def wrapper():
do_some_before
func()
do_some_after
return wrapper
@deco
def foo():
do_something...加入日记
加入事务处理
模块
名称空间
内建空间
__builtins__
全局空间
globals()检查
局部空间
locals()检查
函数
类
实例
OOP
类
类属性
特殊
__name__
__doc__
__bases__
__dict__
__module__
__class__
实例
实例属性
特殊
__class__
__dict__
绑定
类方法
classmethod()
cls
静态方法
staticmethod()
组合
派生
super(C, self)
从标准类派生
不可变
class RoundFloat(float):
def __new__(cls, val):
return super(RoundFloat, cls).__new__(cls, round(val, 2))可变
内建函数
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可调用对象
无名字(当然可人工指定)
关于
cloudcry@gmail.com 记录Py 学习体验
版本:
110117 ZQ转换成XMind
作者:Zoom.Quiet
工具:xMind 3.2.1
feeling-python
Added: 2011-01-17 01:27:27
From: (Joined 2008-11-25 02:01:53)
574 views |27 downloads
feeling-python