Python数据分析
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.6 函数构造和参数

2.6.1 自定义函数

虽然Python的标准库中自带了很多“方法”和函数,例如len()函数,而且代码本身也具有可复制性,但是在具体的应用中现有的“方法”和函数有时并不能满足我们的需求,此时我们可以自己定义函数,在需要时调用函数即可,这样也会使代码简洁易读,方便使用。Python自定义函数的形式和普通函数相似,函数的定义语法为:

def function_name(parameters):

function_expression

return(result)#可选

下面的代码定义了一个统计字数大于20的评论个数的函数count_long_comments。

此处代码功能和前面for循环语句的简单示例代码功能一致,均为统计字数大于20的评论个数,因此输出结果与其一致,为2。

2.6.2 自定义函数的参数

1.必选参数与默认参数

我们在调用一个自定义函数时,必须给函数中的必选参数赋值,否则程序将会报错,并提醒用户“缺少一些必选的位置参数”。在Python中,可以在声明函数的时候,预先为参数设置一个默认值。当调用函数时,如果某个参数具有默认值,则可以不向这个函数传递参数,这时,函数将使用事先声明默认的参数。

下面的代码中,我们定义了一个名为calculate_profit的函数,该函数的目的是计算公司的净利润。它接受两个必选参数revenue(营业收入)和expenses(总支出),以及一个默认参数tax_rate(税率,默认为0.2)。

代码首先通过营业收入和总支出相减得到利润,在通过与税率相乘得到税款,最后使用利润减去税款得到公司的净利润。代码输出结果是公司的净利润为320000。

2.可变参数

如果我们有很多的参数需要转入或者传入函数的参数量是不定的,可以使用可变参数。可变参数应该位于函数参数列表的最后,否则会吞噬掉这些参数。在可变参数之前都有*号修饰。下面我们定义了一个函数calculate_total_sales,它接受可变数量的参数*sales,这个参数表示多个商品的销售额。函数的目的是计算多个商品的总销售额。

上面代码的输出结果是“多个商品的总销售额为:19500。

3.关键字参数

关键字参数既可以接受多个实际参数,又可以把多个实际参数指定给各自的实际参数名,而且这种参数会把带参数名的参数值组装到一个字典中,键就是具体的实际参数名,值就是传入的参数值。我们可以使用关键字参数传入任意个含参数名的参数,这些参数名在函数定义时不用指定,在函数内部,这些参数会被自动分装成字典类型,我们使用**修饰关键词参数。

例如,某社交软件注册界面,昵称和性别为必填项,其他信息为选填项,我们并不知道用户会选填哪些信息,也不知道选填信息的数量,因此我们要把选填项设置为关键字参数,进而使用户会填的选填项为不定量的选填项,而且使用户选填的信息与选填项对应起来。

上面代码的输出结果如下所示。

2.6.3 局部和全局变量

在自定义函数中我们可以定义一个局部变量x,这个变量x只能在自定义函数中有效,在自定义函数之外,x不能被使用。全局变量是在函数外部定义的变量,或在函数内部使用global关键字声明的变量。全局变量可以在函数内部被访问和修改,如果需要修改全局变量,需要使用global关键字声明,以明确指示使用全局变量而不是创建同名的局部变量。

上面代码的输出结果如下所示。

2.6.4 Lambda函数

Lambda函数也叫匿名函数,它是一个没有具体名称的函数。一个Lambda函数可以使用任意多个参数,但是只能有一个表达式。我们定义了一个Lambda函数calculate_price_change,它接受两个参数old_price和new_price,并计算两者之间的差异百分比。

上面代码的输出结果:“价格变动百分比:4.676616915422889”