《Python数据科学指南》——1.15 使用装饰器改变函数行为
本节书摘来自异步社区《Python数据科学指南》一书中的第1章,第1.15节,作者[印度] Gopi Subramanian ,方延风 刘丹 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.15 使用装饰器改变函数行为装饰器能封装一个函数,并改变它的行为,通过示例是理解它们的最好方式,本节中我们演示了实际应用中的一些示例。
1.15.1 准备工作还记得我们在前面章节中将函数作为另一个函数的参数、函数作为一个变量、函数中返回函数等介绍吗?最重要的是,你还记得那个圆柱体的例子吗?如果你掌握了这些,装饰器只是小菜一碟。在本节的示例中,我们将对给定的字符串建立清理操作管道:给定一个混合大小写并带有标点符号的字符串,我们使用装饰器对它进行清理,这些操作还很容易进行扩展。
1.15.2 操作方法我们写一个简单的装饰器来进行文本操作。
from string import punctuation def pipeline_wrapper(func): def to_lower(x): return x.lower() def remove_punc(x): for p in punctuation: x = x.replace(p,) return x def wrapper(*args,**kwargs): x = to_lower(*args,**kwargs) x = remove_punc(x) return func(x) return wrapper @pipeline_wrapper def tokenize_whitespace(inText): return inText.split() s = "string. With. Punctuation?" print tokenize_whitespace(s)1.15.3 工作原理
我们先从以下两行开始。
s = "string. With. Punctuation?" print tokenize_whitespace(s)
我们声明了一个字符串变量,然后想对它进行清理,使之满足以下特性。
将字符串转为小写。
清除标点符号。
返回一个词列表。
我们用字符串s作为参数,调用了tokenize_whitespace函数,我们来看看这个函数。
@pipeline_wrapper def tokenize_whitespace(inText): return inText.split()
这个函数很简单:输入一个字符串,函数采用空格作为分隔符将它进行分割,并返回一个词列表。接下来我们使用装饰器来改变这个函数的行为,这个装饰器就是@pipeline_wrapper,它是以简便的方式调用以下语句。
tokenize_whitespace = pipeline_wrapper (clean_tokens)
我们仔细看看这个装饰器函数。
def pipeline_wrapper(func): def to_lower(x): return x.lower() def remove_punc(x): for p in punctuation: x = x.replace(p,) return x def wrapper(*args,**kwargs): x = to_lower(*args,**kwargs) x = remove_punc(x) return func(x) return wrapper
pipeline_wrapper返回了wrapper函数,在后者中,最后的返回语句是返回func,这是我们传递给wrapper的原始函数,wrapper改变了我们原来的pipeline_wrapper函数的行为。pipeline_wrapper的输入先被to_lower()函数修改了,转成了小写。随后是remove_punc()函数,将标点符号清除。最后的输出如下。
[string, with, punctuation]
以上结果就是我们所要的:清除标点符号,转为小写字符,最后形式是词的列表。
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
相关文章
- python序列化数据本地存放
- Python数据挖掘之决策树DTC数据分析及鸢尾数据集分析
- 【Python五篇慢慢弹(3)】函数修行知python
- Python变量和字符串详解
- 正则表达式python
- Python 保存数据的方法:
- python 用openpyxl库修改excel表格数据(实例)
- Excel:python结合Excel使用技巧经验总结之(将python输出的等间隔列数据直接粘贴复制存到物理表格内等)图文教程之详细攻略
- 成功解决Fatal error in launcher: Unable to create process using ‘“f:program filespythonpython36pytho
- Python编程语言学习:python语言中快速查询python自带模块&函数的用法及其属性方法、如何查询某个函数&关键词的用法、输出一个类或者实例化对象的所有属性和方法名之详细攻略
- Python编程语言学习:python编程语言中重要函数讲解之map函数等简介、使用方法之详细攻略
- Python语言编程学习:numpy中的array格式数据切片与pandas中的dataframe格式数据切片、相互转换
- Python之多线程:python多线程设计之同时执行多个函数命令详细攻略
- Python语言学习:基于python五种方法实现使用某函数名【func_01】的字符串格式('func_01')来调用该函数【func_01】执行功能
- 100天精通Python(数据分析篇)——第76天:Pandas数据类型转换函数pd.to_numeric(参数说明+实战案例)
- 【可再生能源场景生成】使用生成对抗性网络的数据驱动场景生成方法研究(该方法基于两个互连的深度神经网络与基于概率模型的现有方法相比)(Python代码实现)
- 从零开始学python | 使用Python映射,过滤和缩减函数:所有您需要知道的
- C++调用C++项目中的Python脚本中的函数和类。,在,工程,python
- Python编程:shelve模块-持久化python数据
- 用Python做数据分析之数据统计
- 高中信息技术(Python)必修1 数据与计算 出现的模块和函数
- Python学习笔记二之数据类型转换、推导式、运算符、数学运算函数、容器操作
- python使用技巧(三十三):多维列表list数据写入Excel的xlsx文件