《python 与数据挖掘 》一第3章 函  数

简介:

本节书摘来自华章出版社《python 与数据挖掘 》一书中的第3章,第3.1节,作者张良均 杨海宏 何子健 杨 征,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

第3章

函  数

本章将介绍如何使用Python编写函数。函数是Python为了代码效率的最大化,减少冗余而提供的最基本的程序结构。在上一章中,我们学会了众多流程控制的语句,在中大型的程序中,同一段代码可能会被使用多次,如果程序由一段又一段冗余的流程控制语句组成,那么程序的可读性会变差。所以,我们需要使用函数去封装这些重复使用的程序段,并加以注释,下次使用的时候就可以直接调用,使代码更清晰明白。
本书在这里第一次讲到函数封装的概念,实际上我们在前面已经接触到了。例如列表操作的各种方法都是函数,在执行list.append(x)的时候在底层程序已经执行了一段代码。如果不封装成函数,每次添加元素都要输入这段代码,显得非常繁琐。程序员没有必要去探究数据结构源码具体是如何编写的,每种数据结构都会提供众多的函数和相对应的说明文档,程序员仅需知道函数的输入和输出就可以使用数据结构去工作了。
函数能使程序变得抽象。抽象节省了工作,并且加大了程序的可读性。例如,写一个求一列数据的极差的程序,我们可以分解成如下工作:
1)求最大值。
2)求最小值。
3)求极差,极差=最大值-`javascript

最小值。
在第一和第二步中,我们编写函数max()和函数min(),第三步直接调用函数求极差即可。虽然这样做得速度不是最快的,但我们使得程序变得抽象,如果读者不知道极差的概念,但看到如下的代码:range = max(list1)- min(list1),相信你们已经明白程序的输入和输出是什么了。
3.1 创建函数
1. def语句
我们可以用def语句创建函数,格式为:def  fun_name(par1,pa2,…):由def关键字,函数名和参数表组成。先举一个简单的例子:

def fun():
print 'hello,world'

这样就定义了一个fun函数,它没有参数,也没有返回值,仅仅打印出“hello,world”。下面再定义一个有参数也有返回值的函数。


def  hello(your_name):
    # your_name表示你的名字,格式是字符串
    return  'Hello '+your_name

这个函数称为hello,输入参数是your_name,返回加上hello的字符串。程序创建函数后,执行 s = hello('Tom')即得到一个新的字符串“Hello Tom”并赋值给s。Python的简洁性可以从函数中体现,Python的参数也不需要声明数据类型,但这也有一定的弊端,程序员可能会因不清楚参数的数据类型而输入错误的参数,例如上面的函数若执行hello(1)就会报错。所以一般在函数的开头注明函数的用途、输入和输出。
return语句用于返回一个结果对象。Python可以没有返回值,可以有一个返回值,也可以有多个返回值,返回值的数据类型没有限制。当程序执行到函数中的return语句时,就会将指定的值返回并结束函数,如果return后面还有语句,那些语句将不会被执行。所以也可以仅仅用一个return结束函数。在其他语言中很少允许多个返回值,举一个Python有多个返回值函数的例子:

def    maxmin(a,b)
    # a,b为两个数值数据,程序返回它们从大到小排列的结果
    if a>b:
        return  a,b
    else:
        return  b,a
执行big,small = maxmin(2,4)后,big=4,small=2。
  1. lambda语句
    Python允许使用lambda语句创建匿名函数,也就是说函数没有具体的名称。可能读者会产生疑惑,函数没有了名称应该不会是一件好事。但实际上,使用Python编写一些执行脚本时,使用lambda省去了定义函数的过程,代码变得精简。对于一些抽象的、不会在其他地方复用的函数,有时候给函数命名也是个难题(需要避免函数重名),而使用lambda则不需要考虑函数命名的问题。

lamber语句中,冒号前是函数参数,若有多个函数使用逗号分隔,冒号右边是返回值。如此便构建了一个函数对象,def语句也是创建一个函数对象,只是lambda创建的函数对象没有名字。

>>>g = lambda x : x+1
>>>print g
<function <lambda> at 0x030EAEF0>
>>>g(1)

2
使用lamber函数应该注意下面4点:
1)lambda定义的是单行函数,如果需要复杂的函数,应使用def语句。
2)lamdda参数列表可以包含多个函数,如lambda x,y : x + y 。
3)lambda语句有且只有一个返回值。
4)lambda语句中的表达式不能含有命令,而且仅限一条表达式。
举一个例子,Python的数学库中只有以自然底数e和10为底的对数函数,下面我们使用lambda函数创建指定某个数为底的对数函数,如代码清单`javascript3-1所示。
代码清单3-1 匿名函数

from math import log  # 引入Python数学库的对数函数

此函数用于返回一个以base为底的匿名对数函数
def make_logarithmic_function(b
`ase):
    return lambda x:log(x,base)  

创建了一个以3为底的匿名对数函数,并赋值给了My_LF

My_LF = make_logarithmic_function(3)

使用My_LF调用匿名函数,参数只需要真数即可,底数已设置为3。而使用log()函数需要同时指定真数和对数。如果我们每次都是求以3为底数的对数,使用My_LF更方便。

print My_LF(9)

result: 2.0

*代码详见:示例程序/code/3-1.py

相关文章
|
5月前
|
数据采集 Web App开发 数据可视化
Python零基础爬取东方财富网股票行情数据指南
东方财富网数据稳定、反爬宽松,适合爬虫入门。本文详解使用Python抓取股票行情数据,涵盖请求发送、HTML解析、动态加载处理、代理IP切换及数据可视化,助你快速掌握金融数据爬取技能。
3093 1
|
5月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
352 1
|
5月前
|
算法 Java Docker
(Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
IF 条件判断 使用if语句,对条件进行判断 true则执行代码块缩进语句 false则不执行代码块缩进语句,如果有else 或 elif 则进入相应的规则中执行
750 1
|
5月前
|
Java 数据挖掘 数据处理
(Pandas)Python做数据处理必选框架之一!(一):介绍Pandas中的两个数据结构;刨析Series:如何访问数据;数据去重、取众数、总和、标准差、方差、平均值等;判断缺失值、获取索引...
Pandas 是一个开源的数据分析和数据处理库,它是基于 Python 编程语言的。 Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。 Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。 Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
609 0
|
5月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
302 0
|
5月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
5月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
6月前
|
设计模式 缓存 监控
Python装饰器:优雅增强函数功能
Python装饰器:优雅增强函数功能
323 101
|
6月前
|
缓存 测试技术 Python
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
270 99
|
6月前
|
存储 缓存 测试技术
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
343 98

推荐镜像

更多