前言
4.1 回到基础
赋值(略)bar = foo[:]
copy.deepcopy()
等式(略)
is
条件语句 if elif all() any()
4.2 序列字符串
链表
元组
序列类型上的操作表4-1 P148
|Python表达式|评论|
|-|-|
for item in s |
for item in sorted(s) |按顺序遍历
for item in set(s) |
for item in reversed(s) |逆序遍历
for item in set(s).defference(t) |在s中不在t中
for item in random.shuffle(s) |随机顺序遍历
转换:
tuple(s)
list(s)
':'.join(words)
操作:
zip(words,tags) 将两个或更多序列打包成单个配对链表
enumerate(s) 包含index+项目的配对
合并不同类型的序列下划线表示不会使用到其值的变量
使用元组还是使用链表可以看一个项目的内容是否取决于它的位置
列表可变,元组不可变
产生器表达式链表表达式: max([w.lower() for w in alist])
产生器表达式: max(w.lower() for w in alist)
4.3 风格的问题(略)
python代码风格
过程风格与声明风格(略)
计数器的一些合理用途使用循环变量提取链表中连续重叠的 n-grams
[sent[i:i+n] for i in range(len(sent)-n+1)]
NLTK支持函数bigrams(text)
trigrams(text)
ngrams(text,n)
确保语法正确
4.4 函数:结构化编程的基础
函数的输入和输出(略)
参数传递(略)
变量的作用域(略)
名称解析的LGB规则:本地(local),全局(global),内置(built_in)
参数类型检测
防御性编程
`assert isinstance(word,basestring),”argument to tag() mast be a string”
功能分解
重构
文档说明函数
函数顶部docstring约定信息:
doctest
NLTK 使用 “epytext” 标记语言来记录参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25def (reference, test):
"""
Calculate the fraction of test items that equal the corresponding reference items.
Given a list of reference values and a corresponding list of test values,
return the fraction of corresponding values taht are equal.
In particular, return the fraction of indexes
{0
>>> accuracy(['ADJ', 'N', 'V', 'N'], ['N', 'N', 'V', 'ADJ'])
0.5
@param reference: An ordered list of reference values.
@type reference: C{list}
@param test: A list of values to compare against the corresponding reference values.
@type test: C{list}
@rtype: c{float}
@raise ValueError: If C{reference} and C{length} do not have the same length
"""
if len(reference) != len(test):
raise ValueError("Lists must have the same length.")
num_correct = 0
for x, y in zip(reference, test):
if x == y:
num_correct += 1
return float(num_correct) / len(reference)
4.5 更多关于函数
作为参数的函数传递函数名称当做参数
lambda表达式
``
累计函数生成器 yield 关键字
高阶函数filter()
map()
参数的命名*args -> 对应函数所有未命名参数
**kwargs -> 关键字参数字典
已命名参数作用:
允许选择性的使用参数(给定默认值)
作为标志使用(日志输出标识等)
[注]:不要使用可变对象作为参数的默认值
4.6 程序开发
关键高层次能力:算法设计及其在结构化编程中的实现
关键低层次能力:熟悉语言的语法结构,拍出程序故障的各种诊断方法.
Python 模块的结构__file__ 变量定位系统代码的位置
_{变量/方法} 以下划线开头,表示仅用于模块内部
__all__ 内置变量,列出模块的外部可访问列表
多模块程序
误差源头
调试技术
调用调试器
1
2
3import pdb
import mymodule
pdb.run('mymodule.myfunction()')
step (s)执行当前行
next (n)运行下一行后停止
break (b)创建或列出断点
coninue (c)继续执行知道遇到下一个断点
防御性编程
维护一套测试用例,(回归测试)
4.7 算法设计分而治之
二分查找
递归
空间与时间的权衡
动态规划
4.8 Python 库的样例matplotlib
networkx
csv
numpy
and so on …
×
您的支持是我原创的动力