2.8 函数
在Python语言中,函数是一段可重复使用的代码块,用于完成特定的功能。函数可以接受输入参数并返回结果。
函数的主要优点是代码的可重用性和模块化。通过将代码封装在函数中,可以在程序中多次调用函数,避免重复编写相同的代码。函数还可以提高代码的可读性和维护性,因为它们将复杂的逻辑划分为较小的、可理解的部分。
以下是一个简单的Python函数的示例:
def greet(name):
"""打招呼的函数"""
print("Hello, " + name + "!")
# 调用函数
greet("Alice")
greet("Bob")Hello, Alice!
Hello, Bob!
在上面的示例中,greet函数接受一个参数name,并在函数体中打印出相应的问候语。通过调用函数并传递不同的参数,可以多次执行问候的操作。
函数如何定义¶
在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。
def 函数名(参数1, 参数2, 参数3等等): # 注意冒号是语法必备元素
"""本函数的介绍""" # 函数的注释
函数语句块 # 缩进表明语句块内的所有语句都在本函数作用域下
或称函数体 # 函数体中的代码可以是任意有效的Python代码,包括变量声明、条件语句、循环语句、函数调用等。
return 表达式 # 如果函数没有指定返回值,它将默认返回None函数可以接受零个或多个参数。参数是函数定义中用于接受输入值的变量。在函数调用时,可以向函数传递实际的参数值。
我们以自定义一个求绝对值的my_abs函数为例:
def my_abs(x):
"""这是一个求绝对值的函数"""
if x >= 0:
return x
else:
return -x函数如何调用¶
现在我们调用它看看,给其传入一个负数,例如-99:
my_abs(-99)99练习:设计一个比较大小的函数¶
请设计一个比较大小的函数,compare(x, y),使用return语句返回两者中较大的值。
练习:设计一个计算均方误差的函数¶
在回归分析中,均方误差(MSE)是一个常用的指标。
它计算的是预测数据和原始数据对应点误差的平方和的均值,它主要用来评估模型的预测能力。
这里是指模型预测的数据序列,是指原始数据序列, 是累加符号。
设计一个函数名为mse,输入参数为original_y和predicted_y,返回值为计算的结果。
请问,当original_y=[10.1, 9.8, 10.5, 10.0, 10.3], predicted_y=[10, 10, 10, 10, 10]时,MSE的值是多少?
提示:使用变量、for循环语句、def语句和return语句来设计函数,传入变量是两个列表,然后调用并测试函数是否成功运行
练习:设计一个返回逆序列表的函数¶
请设计一个函数,函数名字为reverse,它的输入变量为一个列表,返回这个列表的逆序,例如
>>> l = [1, 2, 3, 4, 5]
>>> reverse(l)
[5, 4, 3, 2, 1]
练习:整数编码¶
在数据挖掘模型中,数据集的属性如果是字符型,需要将其变换为数字,最常用的方法叫整数编码。
它有两个步骤:
建立一个字符串和整数一一对应的字典。
使用循环,遍历所有字符串,将字符串替换为整数。
现有有一个西瓜数据集,请按照下面规则对其进行整数编码。
属性:
色泽 1-3代表 浅白 青绿 乌黑
根蒂 1-3代表 稍蜷 蜷缩 硬挺
敲声 1-3代表 清脆 浊响 沉闷
纹理 1-3代表 清晰 稍糊 模糊
脐部 1-3代表 平坦 稍凹 凹陷
触感 1-2代表 硬滑 软粘
标签:
好瓜 1代表 是 0 代表 不是任务1:
w = [‘青绿’, ‘蜷缩’, ‘浊响’, ‘清晰’, ‘凹陷’, ‘硬滑’, ‘0.697’, ‘0.460’, ‘是’]
列表各元素所对应的属性为’色泽’, ‘根蒂’, ‘敲声’, ‘纹理’, ‘脐部’, ‘触感’, ‘密度’, ‘含糖率’, ‘好瓜’
建立各个属性的字符为键,整数为值的字典
将这个列表的各个元素从字符串转换成数值:[2, 2, 2, 1, 3, 1, 0.697, 0.460, 1]
任务2:
如下是一个嵌套的列表,嵌套的第一个列表为属性和标签,每一个列表的第一个元素为序号。
请只转换需要转换的字符串为数值,其他不变。
w02 = [['编号', '色泽', '根蒂', '敲声', '纹理', '脐部', '触感', '密度', '含糖率', '好瓜'],
['1', '青绿', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', '0.697', '0.460', '是'],
['2', '乌黑', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', '0.774', '0.376', '是'],
['3', '乌黑', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', '0.634', '0.264', '是'],
['4', '青绿', '蜷缩', '沉闷', '清晰', '凹陷', '硬滑', '0.608', '0.318', '是'],
['5', '浅白', '蜷缩', '浊响', '清晰', '凹陷', '硬滑', '0.556', '0.215', '是'],
['6', '青绿', '稍蜷', '浊响', '清晰', '稍凹', '软粘', '0.403', '0.237', '是'],
['7', '乌黑', '稍蜷', '浊响', '稍糊', '稍凹', '软粘', '0.481', '0.149', '是'],
['8', '乌黑', '稍蜷', '浊响', '清晰', '稍凹', '硬滑', '0.437', '0.211', '是'],
['9', '乌黑', '稍蜷', '沉闷', '稍糊', '稍凹', '硬滑', '0.666', '0.091', '否'],
['10', '青绿', '硬挺', '清脆', '清晰', '平坦', '软粘', '0.243', '0.267', '否'],
['11', '浅白', '硬挺', '清脆', '模糊', '平坦', '硬滑', '0.245', '0.057', '否'],
['12', '浅白', '蜷缩', '浊响', '模糊', '平坦', '软粘', '0.343', '0.099', '否'],
['13', '青绿', '稍蜷', '浊响', '稍糊', '凹陷', '硬滑', '0.639', '0.161', '否'],
['14', '浅白', '稍蜷', '沉闷', '稍糊', '凹陷', '硬滑', '0.657', '0.198', '否'],
['15', '乌黑', '稍蜷', '浊响', '清晰', '稍凹', '软粘', '0.360', '0.370', '否'],
['16', '浅白', '蜷缩', '浊响', '模糊', '平坦', '硬滑', '0.593', '0.042', '否'],
['17', '青绿', '蜷缩', '沉闷', '稍糊', '稍凹', '硬滑', '0.719', '0.103', '否']]