您的位置:首页 > 编程语言 > Python开发

Head First Python 学习笔记

2018-01-05 15:35 513 查看
终于大致的将这本书看完了,学习过程中写了一些笔记,主要记了书中每章的一些相关内容

虽然是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、解析以及其他高级语言特性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: