购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.7 函数

这一节介绍Python中的函数。函数是事先定义好的,可重复使用的代码块。函数可接受用户传送的参数,当用户给函数传递其参数值后,函数会计算并返回用户需要的信息,使用函数可以提高代码的可读性和重复利用率。Python函数包括 内置函数 (built-in functions)和 用户自定义函数 (user-defined functions)。在之前的章节里,已经使用了不少内置函数,如print()和range()等。本节将会重点介绍用户自定义函数。用户自定义函数包括两种:def定义函数和lambda匿名函数。def定义函数的格式如下所示。

在上述表达式中,func是用户定义的函数名,函数名后的括号内可以有不同类型的参数,用来传递用户指定的参数值。这些参数有不同的类型和特点,P是一个普通的参数,可以用来传入数值和字符串变量等。P_list是一个列表变量,用户可以用来传入一个列表。P_f是另外一个函数名字,用来将别的函数对象传入本函数。default_p是用户自定义的另外一个变量,这个变量有一个默认值5,用户在调用函数func()时,若不传入变量default_p的数值,则default_p的值默认为5。optional_p是一个可选变量,用户在调用函数时,可以传入变量值也可以不传入变量值。带一个星号的arg(*arg)可以用来传入数量不定的多个变量。**kwargs可以用来传入数量确定的多个变量,但函数在使用时可以像字典那样使用,这将会在接下来的例子中展示。

第一个函数例子中,传入了多个变量,包括两个数值变量和一个字符串变量。

第二个函数例子中向函数squares传入一个列表,这个列表可以在函数中进行操作。

第三个函数例子中,被创建的函数将会接收另外一个函数,作为函数的其中一个变量。这个函数使用 梯形积分法 (trapezium rule)求函数的定积分。如图2-17所示为用梯形积分法求解定积分的原理。用梯形积分法求函数定积分时,常常需要给定函数的表达式和定积分的上下限。在以下例子中,函数trap()可以用来接收待求定积分的函数表达式以及定积分的上限 a 和下限 b

图2-17 梯形积分图示

梯形积分法的数值计算公式为:

式中: x b x a 分别为积分上下界;∆ x 为积分步长; n 为积分步数。

下面用梯形积分法求解函数 f 1 x )和 f 2 x )在特定区间内的定积分数值。

请读者自行运行如下代码计算积分。

在上例中,求定积分的函数trap()有四个参数:f、n、start和end。f是待求定积分的函数表达式;n表示积分步数,n越大,定积分的计算精度越高;start是定积分的上限;end是定积分的下限。在定义trap()函数时,给定了start和end的默认值,分别是0和1。在调用trap()函数时,用户可以不给定start和end的值,此时它们默认为0和1。若用户使用trap()函数时,给定了start和end的值,则按用户给定的积分上下限来求函数的定积分。

在第四个例子中,介绍使用*args来接收多个数量不确定的变量参数。函数在接收这些变量值后,会把它们存成一个元组。虽然读者也可以使用*data,但一般而言建议用*args来告知Python将会用来接收多个数量不确定的变量参数。由于*args接收数量不确定的变量,因此需要把*args放到函数定义的参数列表的最后一个。

第五个例子将展示如何在函数中定义可选参数。用户可以选择是否给这个可选参数传递值,这样可以大大地方便用户在合适的时候才传递值。以下这个例子展示了利用可选参数来输出老外的人名,由于有些老外只有名和姓,没有中间名字,因此这个可选参数可以帮助实现这个功能。

第六个例子将展示如何使用**kwargs来传递数量不确定的多个参数。**kwargs和*args有点类似,都是可以用来传递数量不确定的多个参数。两者最大的区别在于,**kwargs传递的方式类似于字典。读者可以尝试运行以下的代码,在这个例子中,调用outputData()函数时,向函数传递了这样的参数“name = "John Smith",num = 5,b=True”。在定义outputData()函数时,函数指定了显示kwargs["Name"]和kwargs["num"]。这种调用方式和字典的调用方式类似。 nR7UStjAKNPcdOQB9GI2dlJN5wDUY26VYYcxPteVgEnENIJuGUVDsQYjP2MD1LPC

点击中间区域
呼出菜单
上一章
目录
下一章
×