在程序中需要反复执行的某些代码,我们能否将它们封装起来?
能,可以使用函数来封装。函数具有函数名、参数和返回值。Python中的函数很灵活:可以在模块中但是类之外定义,作用域是当前模块,我们称之为函数;也可以在别的函数中定义,我们称之为嵌套函数;还可以在类中定义,我们称之为方法。
1 定义函数
什么是形式参数:
由于定义函教时的参数不是实际数据,会在调用函数时传递给它们实际数据,所以我们称定义函数时的参数为形式参数,简称形参;称调用函教时传递的实际教据为实际参数,简称实参。你可以将形参理解为在函数中定义的变量。
2 调用函数
在定义好函数后,就可以调用函数了,很简单!
2.1 使用位置参数调用函数
在调用函数时传递的实参与定义函数时的形参顺序一致,这是调用 函数的基本形式。
2.2 使用关键字参数调用函数
在调用函数时可以采用“关键字=实参”的形式,其中,关键字的名 称就是定义函数时形参的名称。
使用关键字参数调用函数时,调用考能够清晰地看出所传递参数的含义,提高函数调用的可读性。
3 参数的默认值
4 可变参数
4.1 基于元组的可变参数(*可变参数)
*可变参数在函数中被组装成一个元组。 示例代码如下:
4.2 基于字典的可变参数(**可变参数)
**可变参数在函数中被组装成一个字典。 示例代码如下:
5 函数中变量的作用域
变量可以在模块中创建,作用域(变量的有效范围)是整个模块, 被称为全局变量。变量也可以在函数中创建,在默认情况下作用域是整 个函数,被称为局部变量。
修改示例代码如下:
6 函数类型
Python中的任意一个函数都有数据类型,这种数据类型是function, 被称为函数类型。
6.1 理解函数类型
函数类型的数据与其他类型的数据是一样的,任意类型的数据都可 以作为函数返回值使用,还可以作为函数参数使用。因此,一个函数可 以作为另一个函数返回值使用,也可以作为另一个函数参数使用。
示例代码如下。
增加平方函数,示例代码如下:
add()和sub()函数有两个数字参数,具有相同的函数类型。sq uare()函数只有一个数字参数,所以square()与add()、sub()函 数的类型不同。
6.2 过滤函数filter()
在Python中定义了一些用于数据处理的函数,如filter()和map( )等。我们先介绍filter()函数。
filter()函数用于对容器中的元素进行过滤处理。
filter()函数的语法如下:
参数function是一个提供过滤条件的函数,返回布尔值。
参数iterable是容器类型的数据。
示例代码如下:
通过Python指令运行文件,输出结果。
6.3 映射函数map()
map()函数用于对容器中的元素进行映射(或变换)。例如:我 想将列表中的所有元素都乘以2,返回新的列表。
map()函数的语法如下:
参数function是一个提供变换规则的函数,返回变换之后的元素。 参数iterable是容器类型的数据。 示例代码如下:
通过Python指令运行文件,输出结果。
7 lambda()函数
我们之前学习的函数都是有名称的函数,例如在8.1节定义的rect_ar ea()函数,rect_area就是其函数名。我们也可以定义匿名函数,匿名 函数就是没有名称的函数。
在Python中使用lambda关键字定义匿名函数。lambda关键字定义的 函数也被称为lambda()函数,定义lambda()函数的语法如下。
“参数列表”与函数的参数列表是一样的,但不需要用小括号括起来
lambda()函数与有名称的函数一样,都是函数类型,所以8.6.1节 的add()和sub()函数可以被lambda()函数替代。修改8.6.1节的代 码示例如下:
8 动动手——使用更多的lambda()函数
使用lambda()函数替换f1()函数:
9 练一练
1 通过以下函数sum()定义代码,调用语句正确的是()。
def sum(*numbers):
total=0.0
for number in numbers:
total+=number
return total
A.print(sum(100.0,20.0,30.0))
B.print(sum(30.0,80.0))
C.print(sum(30.0,'80'))
D.print(sum(30.0,80.0,'80'))
2 通过以下函数area()定义代码,调用语句正确的是()。
def area(width,height):
return width*height
A.area(320.0,480.0)
B.area(width=320.0,height=480.0)
C.area(height=480.0,width=320.0)
D.area(320.0,'480')
3 填空题:请在以下代码横线处填写一些代码,使之获得期望的输 出结果。
x=200
def print_value():
____x
x=100
print("函数中x={0}".format(x))
print_value()
print("全局变量x={0}".format(x))
输出结果:
函数中x=100
全局变量x=100
4 判断对错:(请在括号内打√或×,√表示正确,×表示错误)。
1)Python支持函数重载。()
2)map()函数用于对容器中的元素进行变换。()