python视频教程唐学韬-Python编程实践 学习笔记

Practical Programming-An Introduction to Computer Science Using Python这本书是Jennifer Campbell等著,唐学韬(汕头大学)译,全书300页,虽内容不多,但个人认为译者比较负责,如未统一的专有词都给出英文原词,全书风格一致。

Python以简单为美,本书也类似风格,是一本实践型入门读物,不是参考手册。因不是第一次接触Python,所以本笔记较粗糙,只记录应该注意的地方。

第一章 引言

Jeannette Wing教授认为计算型思维主要包括以下内容:

强调概念化,而非程序化。计算机科学不是计算机编程。像计算机科学家一样思考,不只要会编程,还要能在多个抽象层次上进行思考。

它是人类(而非计算机)的一种思考方式。

不论何人,不论何处。当计算型思维充分融入到人们的工作学习中,并且如常识般地从我们的注意力中消失时,它就成为了现实。

第二章 你好 Python

注意浮点数的数值精度问题,否则可能冷不丁地出错,数值分析(numerical analysis,研究近似数学算法的学科)本身就是计算机科学和数学领域的最大分支。

round() 内置的四舍五入函数。

形参(parameter,函数定义时的)与实参(argument,函数调用时传入的)的区别。

第三章 字符串

pass

第四章 模块

Python不允许"冻结”变量,即没有常量。

内置函数位于__builtin__模块中,可以用dir函数查看。Python 2.5 有135个成员,Python 2.7.3有146个成员。

字符串方法 capitalize() 返回字符串的首字母大写副本。

Nose测试库,及面向对象的unittest测试库

#calc.py

#encoding: UTF-8

def adds(a, b):

return a + b

#test_calc.py

#coding: UTF-8

import nose

import calc

def test_adds():

assert calc.adds(1, 2) == 4

if __name__ == '__main__':

nose.runmodule()

第五章 列表

列表是异构的,可以包含任何类型的数据。

id() 函数查看对象地址。

[:] 创建列表完整副本。

别名(alias)机制,两个变量引用同一个值时,就互为别名。

一个元素的元组是(e,) 而不是(e)

元组不可变(immutable)。不应该说某种东西"位于"元组中,这是不严谨的,应该说:"元组在创建后,其所包含的引用就不能再修改了”,而这些引用所指向的对象本身则仍然是可以修改的。

第六章 做出选择

"兼容或”(inclusive or, 即一般意义上的"或”),"互斥或”(exclusive or, 即"异或”)

运算符串联:3 < x < 5 其实是这样执行的 (3 < x) and (x < 5) 强烈建议只按照数学上看起来正常的方式去链接比较运算。

0, None, 空字符串, [], {}都被看做False

第7章 重复

多值赋值(multivalued assignment) a, b = b, a

enumerate() 返回"值对”组成的列表

Python通过运行时栈(runtime stack)去跟踪所有正在运行的函数。可以将运行时栈想象成一级记录序列,称为帧。当调用函数时,就会放入该序列的顶端。只有最顶部的那一帧是活动的。不属于任何函数的那些代码都是在一个特殊的帧内执行的,它位于运行时栈的最底部,该帧叫着,因为它是在模块级别上执行的。

第8章 文件处理

如果文件每行的列是固定的,又想提取各列,可以定义一个各列宽度的元组,方便后面使用列表切割每行

fields = (2, 3, 4)

若想转换成各种格式,可以这样

fileds = ((2, int), (3, int), (4, float))

for line in f:

start = 0

record = []

for (width, target_type) in fileds:

text = line[start: start + width]

filed = target_type(text)

record.append(filed)

start += width

read_block() 函数可以返回多值,以吐出它读进的行

block, line = read_block(f, line)

第9章 集合和字典

set(集合)对象有很多数学集合运算的函数

Python集合是以散列码存元素的位置,所以集合中的元素必需为不可变(immutable)值。实际上,元组存在的理由之一即是让我们能够将('Albert', 160)之类的复合值添加到集合中去。

字典dict也称为映射map。

判断某个键是否在字典中可以直接使用 k in d。

dict.get(k [,d]) 若指定键不存在,则返回用户设定的d,通过这个可以直接实现统计元素:

d[k] = d.get(k, 0) + 1

第10章 算法

找出列表中最小两个值的3种算法:

查找,移除最小值,再查找

排序,标识最小值

扫描列表,更新最小的两个索引

看起来简单,实现中有很多细节。

第11章 搜索和排序

实现了几个简单的搜索与排序算法,内置的list.sort(),list.index()函数效率不低。

第12章 构建应用程序

默认参数值,可变参数列表(*)((**)这个没讲到),命名参数。

异常对象,Python会维护一个异常处理器栈,类似于函数调用栈。当异常发生引发之后,依次从这个栈中取出异常处理器,直到找到匹配为止,所以except有顺序的。

引发异常 raise 异常类型(说明具体问题的错误消息),如:raise ValueError('divisor is zero')

测试与测试驱动开发。

模式:其中之一就是变量,变量通常都是以某种固有方式使用的:

固定值(fixed value) 就是在被赋值之后其值不再发生变化的变量。

计步器(stepper)就是以某种可预见的方式"漫步走过”一个值序列的变量,for循环中的索引变量就是计步器。

计数器(counter)指示当前已经看到过多少东西的整数。

最符合值存储器。

最近值存储器。

容器(container)就是用来承载其它值的值。

收集器(gatherer, 有时也称为累加器(accumulator))

临时变量(temporary)

单向标志(one-way flag)用于指示某件事已经发生的变量。

第13章 面向对象编程

特殊方法__init__()

dir() 与help()函数

oo的一点理论知识:

封装(encapsulate)

多态(polymorphism)

继承(inheritance)

第14章 图形用户界面

model-view-controller

事件驱动编程(enent-driven programming)能够随时对输入进行响应。

有趣的lambda理解:

>>> lambda:2

at 0x01DA9E70>

>>> (lambda: 2)()

2

上面代码中,第一行中的表达式lambda: 2 创建了一个匿名函数,该函数的功能就是返回3。第二个表达式创建并立即执行了同样的函数。

lamdba函数用在事件点击函数。

#!/usr/bin/env python

#encoding: utf-8

import Tkinter as tk

window = tk.Tk()

# the module

counter = tk.IntVar()

counter.set(0)

# general controller

def click(var, value):

var.set(var.get() + value)

# the views

frame = tk.Frame(window)

frame.pack()

button = tk.Button(frame, text='up', command=lambda: click(counter, 1))

button.pack()

button = tk.Button(frame, text='down', command=lambda: click(counter, -1))

button.pack()

label = tk.Label(frame, textvariable=counter)

label.pack()

windos.mainloop()

#encoding: UTF-8

import Tkinter as tk

class Counter(object):

"""docstring for Counter"""

def __init__(self, parent):

super(Counter, self).__init__()

# framework

self.parent = parent

self.frame = tk.Frame(parent)

self.frame.pack()

# model

self.state = tk.IntVar()

self.state.set(1)

# Label displaying current state

self.label = tk.Label(self.frame, textvariable=self.state)

self.label.pack()

# button to control application

self.up = tk.Button(self.frame, text='up', command=self.upClick)

self.up.pack(side='left')

self.right = tk.Button(self.frame, text='quit', command=self.quitClick)

self.right.pack(side='left')

def upClick(self):

self.state.set(self.state.get() + 1)

def quitClick(self):

self.parent.destroy()

if __name__ == '__main__':

window = tk.Tk()

myapp = Counter(window)

window.mainloop()

第15章 数据库

事务(transaction)

import sqlite3 as dbapi

con = dbapi.connect('database.db')

# 创建游标

cur = con.cursor()

# 执行创建命令

cur.execute('create table tablename(id INTERGER, name TEXT')

# 提交

cur.commit()

# 获取数据

cur.execute('select name from tablename')

# 打印查询

print cur.fetchone()

不建议用NULL来处理缺失的数据。

键和约束。

高级功能:聚合,分组,自连接,嵌套查询

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值