第四章-编写结构化程序(Natural Language Processing with Python第二版)

本文主要是介绍第四章-编写结构化程序(Natural Language Processing with Python第二版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第四章 编写结构化程序

1.如何编写结构良好、可读性强的程序以能够方便地重用?

2.基本构建块是如何工作的,比如循环、函数和赋值?

3.Python编程有哪些陷阱,您如何避免它们?

4.1 回归基础

1) 赋值

2) 等于

3) 条件

4.2 序列

1)

2)组合不同类型的序列

words = 'I turned off the spectroroute'.split()
wordlens = [(len(word), word) for word in words]
wordlens.sort()
print( ' '.join(w for (_, w) in wordlens))

元组和列表区别

('grail', 'noun') ('noun', 'grail')是不一样的
元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用
元组中的元素值是不允许修改的 ['venetian','blind']  ['blind', 'venetian']一样的
你可以对列表的数据项进行修改或更新,你也可以使用append()方法来添加列表项

4.3 风格问题

4.4函数:结构化编程的基础

函数使我们的工作具有重用性和可读性,并且使我们的工作更加可靠,当我们重用已经开发并测试过
的代码的时候,我们会对它能正确处理各种各样的情况有信心,我们也消除了忘记一些重要步骤或者
引入bug的风险,使用这些函数的项目也增加了可靠性,

1)函数的输入和输出

我们通过函数的参数来传递信息,在函数名后面用括号括起来的变量和常量就是参数

def repeat(msg, num):return ' '.join([msg] * num)
monty = 'Monty Python'
print(repeat(monty, 3)) 

函数中的参数不是必不可少的,我们可以看下面的例子:

def monty():return "Monty Python"
print(monty())

正如我们刚才看到的,函数通常通过return语句将结果返回给调用程序。对于调用程序,看起来函数调用已被函数的结果替换

print(repeat(monty(), 3))
print(repeat('Monty Python', 3))

函数可以修改参数的内容,或者返回一个值,但不能两者同时使用,否则容易出问题

def my_sort1(mylist):   mylist.sort()
def my_sort2(mylist):  return sorted(mylist)
def my_sort3(mylist):  mylist.sort()return mylist

2)参数传递

def set_up(word, properties):word = 'lolcat'properties.append('noun')properties = 5
w = ''
p = []
set_up(w, p)
print(w) # ''
print(p) #['noun']

w输出还是’’ 这个参数传递与下面的序列赋值相同:

w = ''
word = w
word = 'lolcat'
print(w)

p输出变成了[‘noun’],因为list是结构化对象

p = []
properties = p
properties.append('noun')
properties = 5

3)变量作用域

LGB rule:local then global then built-in
LGB变量名引用分为三个作用域进行查找:首先是本地,然后是全局,最后是内置。
可以通过global 声明在函数里创建一个全局变量,但这种做法应该尽量避免,因为函数里的全局变量依赖上下文并且限制了函数的可移植性(或可重用性)。一般来说,函数输入应该使用参数,函数输出应该使用返回值。

4)检查参数类型

def tag(word):if word in ['a', 'the', 'all']:return 'det'else:return 'noun'
print(tag('the')) #det
print( tag('knight'))  #noun
print( tag(["'Tis", 'but', 'a', 'scratch'])) #noun

使用assert语句和Python的basestring类型,后者可以在unicode和str上进行泛化。python3里的str包含python2中的unicode,判断有所不同

def tag(word):assert isinstance(word, str),"argument to tag() must be a string"if word in ['a', 'the', 'all']:return 'det'else:return 'noun'
print(tag('the'))
print(tag('knight'))
tag(["'Tis", 'but', 'a', 'scratch']) #AeesrtionError

5)Functional Decomposition

当一个代码块太长超过10-20行,最好分成很多函数,增加可读性。

def freq_words(html, freqdist, n):text = BeautifulSoup(html, "html5lib").get_text()for word in nltk.word_tokenize(text):freqdist[word.lower()]+=1print(list(freqdist.keys())[:n])
constitution=open("./html.html").read()
fd = nltk.FreqDist()
print(freq_words(constitution, fd, 20))def freq_words(html):freqdist = nltk.FreqDist()text = BeautifulSoup(html, "html5lib").get_text()for word in nltk.word_tokenize(text):freqdist[word.lower()] += 1return freqdistconstitution=open("./html.html").read()
fd = freq_words(constitution)
print (list(fd.keys())[:20])constitution=open("./html.html").read()
text = nltk.word_tokenize(BeautifulSoup(constitution, "html5lib").get_text())
fd=nltk.FreqDist(text)
print (list(fd.keys())[:20])

6)Documenting Functions

Python3 文档字符串(Docstring)是一个字符常量,它是模块,函数,类,方法定义中的第一个声明,声明文档字符串后,可以使用相应对象的__doc__属性引用文档字符串,定义文档字符串后可以使用特定的工具提取这些文档字符串,生成Python3函数或类的使用说明文档。并且 Python 3 编码规范建议在模块,类,方法,函数定义中都包含文档字符串。

print(nltk.word_tokenize.__doc__)
print(nltk.FreqDist.__doc__)
print(text.clear.__doc__)

4.5深入了解函数

1)函数作为参数

sent = ['Take', 'care', 'of', 'the', 'sense', ',', 'and', 'the','sounds', 'will', 'take', 'care', 'of', 'themselves', '.']
def extract_property(prop):return [prop(word) for word in sent]
print(extract_property(len))
def last_letter(word):return word[-1]
print(extract_property(last_letter))

注意,只有在调用函数时,才在函数名后面使用括号; 当我们简单地将函数作为对象处理时,这些将被省略。

2)累计函数

3)高阶函数

这篇关于第四章-编写结构化程序(Natural Language Processing with Python第二版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/446955

相关文章

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

使用Python实现高效的端口扫描器

《使用Python实现高效的端口扫描器》在网络安全领域,端口扫描是一项基本而重要的技能,通过端口扫描,可以发现目标主机上开放的服务和端口,这对于安全评估、渗透测试等有着不可忽视的作用,本文将介绍如何使... 目录1. 端口扫描的基本原理2. 使用python实现端口扫描2.1 安装必要的库2.2 编写端口扫

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交