前言

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代码风格

Python 代码风格指南

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约定信息:

https://www.python.org/dev/peps/pep-0257/

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
25
def accuracy(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<i<len(test)} such that C{test[i] == reference[i]}.
>>> 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
3
import 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 …

最后更新: 2019年05月09日 12:35

原始链接: https://ice-melt.github.io/2019/04/17/Python_NLP_04/

× 您的支持是我原创的动力
打赏二维码