终于大致的将这本书看完了,学习过程中写了一些笔记,主要记了书中每章的一些相关内容
虽然是2012年的书 不过具体的内容还是很有参考价值的,以下序号为每章的内容。
1.BIF isinstance()指示标识符是否指向某个指定类型的数据对象 len() 缩进2.setup.py 提供了模块的元数据,用来构建、安装和上传打包的发布。
form module import function
python的主命名空间为__main__
内置函数的命名空间为__buildins__并自动包含在每一个python程序中
range()可与for联用固定迭代次数。
为函数参数提供缺省值(在定义时)则该函数参数就为可选的。
PyPi.python.org
3.seek()可用来将文件退回到起始位置
split()可将一个字符串分解为一个子串列表
数据不符合期望ValueError 数据无法正常访问IOError
help()
find()在一个字符串中查找一个特定字串
not
try/except
with 自动完成关闭 as
finally总会执行
pass(NULL语句)
4.str()
strip()去除空白符
sys.stdout(需import sys)
in检查成员关系
+ 连接字符串或数字相加
locals返回当前作用域中的变量集合
import pickle
pickle dump() load() PickleError
open('data.pickle', 'wb') as savadata #二进制写
pickle.dump([1,2,'three'], savadata)
open('data.pickle', 'rb') as restoredata #二进制读
a_list=pickle.load(restoredata)
import copy
#赋值相当于浅拷贝 深拷贝需使用copy.deepcopy
5.var.sort() #向其中传入reverse=True可以按照降序排列数据
sorted(var) #对一个列表项完成转换而不是对整个列表
var.upper()
float(var)
not in
工厂函数:创建某种类型的新的数据项 例如set() 创建一个新的集合
for example: distance=set()
distance={10.6,11,8,10.6,'two',7} #所提供的数据值列表中的任何重复项都会被忽略
或 distance=set(james) #james列表中的所有重复项都会被忽略
如果有以下代码:
new_l=[]
for t in old_l:
new_l.append(len(t))
使用列表推导重写这个代码可写作:new_l=[len(t) for t in old_l]
要访问一个列表中的多个数据项,可以使用分片。
例如:my_list[3:6]这会访问列表中从索引位置3直到(但不包括)索引位置6的列表项。
6.使用dict()工厂函数或使用{}可以创建一个空字典 person={}或person=dict()
访问person字典与Name关联的值,可使用 person['Name']
字典可动态扩大
初始化可直接使用person={'Name':'takefetter'}
class中每个方法的第一个参数都是self
例如:class a(list):#()表示继承自
def __init__(self,a_name,a_dob=None,a_times=[]):
self.name=a_name
self.dob=a_dob
self.times=a_times
7.Web开发 MVC模式(Model-View-Controller 模型-视图-控制器)
书中推荐的文件夹结构:
webapp-cgi-bin
-data
-imamges
-tenplates
-index.html
GCI让服务器运行程序 网关结构(Common Gateway Interface,GCI)
from http.server import HTTPServer,CGIHTTPRequestHandler
port=8080
httpd=HTTPServer(('',port),CGIHTTPRequestHandler)
print("Start simple_httpd on port: " +str(httpd.server_port))
httpd.serve_forever()
/
基于Unix系统执行需:
chmod+x命令设置CGI的可执行权限位(键入chmod+x generate_list.py设置可执行权限位)
在程序最前面增加以下代码 #! /usr/local/bin/python3
/
import cgi
import cgitb #
cgitb.enable()#python的cgi跟踪技术
cgi.FieldStorage()#访问作为Web请求一部分发送给Web服务器的数据,数据将作为一个Python字典
@property修饰符允许访问函数放回的数据时把它看作一个类属性。
string模块包含一个名为Template的类,支持简单的字符串替换
glob模块非常适合处理文件名列表
8.使用python构建简单的android应用程序
http://code.google.com/p/android-scripting
Sl4a_r2.apk python_for_android_r1.apk
import android
app=android.Android()
msg="Hello from Head First Python on Android"]
app.makeToast(msg)
app.diglogCreateAlert()
app.diaglogSetSingleChoiceItems
app.dialogSetPositiveButtonText()
app.dialogSetNegativeButtonText()
app.dialogShow()
resp=app.dialogGetResponse().result
JSON库模块允许将Python的内置类型转换为基于文本的JSON数据交换格式
json.dumps()可以创建一个Python类型的字符串版本
json.loads()可以从一个JSON字符串创建一个Python类型
数据若使用JSON发送,需要将其Content-Type:设置为application/json
urllib和urllib2库模块可以用来从一个程序向web服务器发送编码的数据
import sys
sys.stderr sys.stdin sys.stdout
9. SQLite
过程:连接-创建游标-利用游标交互-提交or回滚-关闭并撤销游标
管理工具 sqlite3命令行工具
本书使用SQLite Manager
SQL(Structured Query Language) 使用CREATE,INSERT和SELETE等处理数据库中的数据
import sqlite3
connection =sqlite3.connect('test.sqlite')
cursor.connection.cursor()
cursor.execute("""SELECT DATE('NOW')""")
cursor.execute("""SELECT FROM test """)
cursor.execute("""SELECT FROM test WHERE id=?""",(athlete_id)) #"?"占位符允许在Python代码中为SQL语句制定参数
connection.commit()
connection.close()
rollback()方法取消对数据做出的所有未完成的修改
import sqlite3
connection =sqlite3.connect('coachdata.sqlite')
cursor.connection.cursor()
cursor.execute("""CREATE TABLE athletes(
id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL,
name TEXT NOT NULL,
dob DATE NOT NULL)""")
cursor.execute("""CREATE TABLE timing_data(
athlete_id INTERGER NOT NULL,
value TEXT NOT NULL,
FOREIGN KEY (athelete_id) REFERENCES athletes)""")
connection.commit()
connection.close()
10.Google App Engine http://code.google.com/appengine/
每个App Engine Web应用必须有一个名为app.yaml的配置文件
可以使用GAE Launcher 管理web应用
GAE模板技术建立在Django模板技术之上
可以使用self.resonse构造一个GAE Web响应
可以使用self.request访问一个GAE Web应用的表单数据
响应一个GET/POST请求时,需在一个get()/post()方法中实现必要的功能
使用put()方法将数据存储在App Engine datastore中
11.input()接收输入(raw_input() python2)
time模块作为标准库的一部分,包含了大量函数可以完成时间格式之间的转换
12.本书没有提到的其他问题
1)IDE
2)作用域
3)测试 unitteset doctest
4)高级语言特性 lambda表达式创建简短的单行匿名函数
生成器 使用yield表达式,可以尽量减少程序耗费的内存,且能在大规模数据集上提供类似迭代器的功能
定义异常 创建自己的异常对象
函数修饰符 通过介入函数的启动和关闭机制,调整一个已存在函数的行为
元类
5)正则表达式 Regular Expressions
如
phone_number ="Cell(mobile):(555)-918-8271"
results =re.search('\((\d{3}\)',phone_number) #本处博客显示有问题 可以点击view plain查看
area_code=results.group(1)
print('The area code is:' +area_code)
7)对象关系映射工具(object relational mapper,ORM) 使用底层的一个基于SQL的数据库而不必了解SQL,
通过方法调用和属性查找为数据提供了一个面向对象的接口,SQLALchemy、Google App Engine的datastore API
从风格上类似于主流Python ORM的API
NoSQL避免处理底层基于SQL的数据库 CouchDB MongoDB
8)GUI变成 tkinker、PyGTK、PyKDE、WxPython、PyQT
9)避免3种bug 你的bug、我的bug、线程bug
全局解释器锁(Global Interpreter Lock,GIL) 要求Python只能在一个解释器进程中运行,即使有多个处理器可用。
除非去除GIL限制(如果真的能去除),否则不要在Python编程中使用线程
10)其他Python书
Dive into Python 3 如何将复杂的Python 2模块移植到Python 3
Python for Unix and Linux System Administration 系统管理
Python Essential Reference Python桌面开发参考书
Learning Python 1200页,Python权威语言指南
Programming in Python 3 包含大量示例,其中用到一些重要技术,XML、解析以及其他高级语言特性