函数是组织好的、可重复使用的、用来实现特定功能的代码段。函数可使程序模块化,提升代码的重复利用率。函数是Python程序的重要组成部分。
使用def语句定义函数,格式为
定义一个函数首先使用def关键字开头,然后依次写出函数名、括号、括号中的参数和冒号,接下来在缩进块中编写函数体,函数的返回值使用return语句。如果没有return语句,则函数默认返回None。函数体内部的语句在执行时,一旦执行到return,函数体就执行完毕并将结果返回。
编写一个名为printName的函数,将一个字符串作为参数传入函数,并将该字符串打印出来,使用return返回,即
知道函数名和参数后,就可以很方便地调用函数了,可以继续编写程序调用已定义的printName函数,即
程序首先获取用户输入,然后调用printName函数,并将用户输入的字符作为参数传入printName函数,运行结果为
确定了函数参数的名称和位置之后,函数接口也就定义成功了。函数的调用者只需要关心传入正确的参数及函数的返回值,函数内部的复杂逻辑已被封装起来了,不需要了解。
Python的函数定义非常简单,非常灵活,除了正常定义的必需参数,还可以使用默认参数、可变参数及关键字参数。丰富的参数类型使函数接口不但能处理复杂的参数,还可以简化调用者的代码。
必需参数
调用函数时,传入的参数数量和类型需要与函数的定义一致,否则会报语法错误,如调用printName函数时,不传入参数会提示TypeError,即
运行结果为
TypeError提示printName()函数的调用需要传入name参数。
默认参数
修改printName函数,为其添加'性别'参数,可以将其默认设置为'男性',当用户为男性时,就仅需要传入name,不需要每一次调用都输入'性别',即
运行结果为
当messi为男性时,调用printName()函数并未传入性别参数,gender参数就是Python函数中的默认参数。
从上述例子可以看出,默认参数可以简化函数的调用。设置默认参数时需要注意,必须参数在前,默认参数在后,否则Python的解释器会报错;当函数有多个参数时,变化大的参数放在前面,变化小的参数放在后面,变化小的参数可作为默认参数。当函数的参数数量越多、默认参数数量越多时,默认参数的方式就更能简化调用的复杂度。
可变参数
构建一个函数,可实现所有指定数字的累加,即
由于参数的数量不确定,因此想要调用sum函数,就需要先将参数构建为一个列表或元组
后,再将列表作为参数调用sum函数,即
除此之外,Python还有可变参数,在sum函数参数的前面加上星号(*),意味着将该参数变为可变参数,即
有了可变参数,在调用的时候就不需要再传入列表或元组了,可以随意传入任意数量的参数,即
参数数量也可以为0,即
关键字参数
假设需要调用printName函数实现用户的信息管理功能,则除了name和性别,还想继续添加年龄信息怎么办呢?此时可以借助 关键字参数 。关键字参数是在参数名称前添加两个星号,如**par。
调用可变参数时允许传入0个或多个参数。这些可变参数在函数调用时自动组装为一个元组。关键字参数允许传入0个或多个含参数名的参数,在函数内部自动组装为一个字典。使用关键字参数改写printName函数为
调用时添加年龄信息,即
执行结果为
关键字参数便于函数功能的扩展,可以根据需求灵活添加新的参数。
命名关键字参数
对于printName函数,如果不允许用户随意添加新的参数(身高、体重等),只允许添加年龄、城市,那么可以使用 命名关键字参数 来实现。命名关键字参数需要使用特殊分隔符(*),后面紧跟着的参数即是命名关键字参数。修改printName函数为
调用方法为
在Python中,函数参数的形态非常灵活,可以简单调用,也可以传递非常复杂的参数。默认参数只能使用不可变参数。如果是可变参数,则运行时会出现逻辑错误。Python中的多种参数可以组合使用。需要注意的是,参数顺序必须是必需参数、默认参数、可变参数、命名关键字参数和关键字参数。
Python提供了大量定义好的函数,即内置(built-in)函数。内置函数随着Python解释器的运行而创建,Python程序可以随意调用,不需要定义。Python中有以下比较常见的内置函数。
数学函数
类型转换函数
其他常用函数