第十章 函数
一、定义函数
定义一个函数的格式如下:
def 函数名(参数):
do something
…
其中参数可以有多个,参数也可以为多种类型,如列表、字典等,此外函数中对列表的修改是永久性的,这里的修改指的是使用诸如append()、pop()等方法对列表进行的修改,如果不想让原来的列表内容发生改变,则可以向形参传入原来列表的副本,即列表名[:]。
提示:创建列表的副本需要花费一定的时间,所以在选择时也要考虑时间效率。
二、实参和形参
函数中的参数是形参,函数调用中的参数为实参。
调用函数时,Python必须将函数调用中的每个实参都关联到函数定义中的一个形参。
此外,位置实参的顺序也要注意,要与函数定义时的位置相一致,不过也可以通过使用关键字实参的方法,即在传递实参时,直接对形参进行赋值,如:
def example(a,b):
print(a)
print(b)
example(b='world',a='hello')
这样就不用区分参数顺序了。
三、形参的默认值
在编写函数时,可给每一个形参指定一个默认值,当函数调用没有给形参提供实参时将使用形参的默认值,如以下形式:
def example(a,b='dog'):
print(a)
print(b)
其中形参b的默认值为’dog’。
此外,通过if语句和默认值的搭配使用,可以让实参变成可选的。
注意:当使用默认值时,在形参列表中必须先列出莫有默认值的形参,在列出有默认值得形参,这让Python依然能够正确的解读位置实参。
四、函数返回值
函数不仅可以直接进行一些操作,也可以处理一些数据,并返回一个或一组值,如:
def get_formatted_name(first_name,last_name):
"""返回标准格式的姓名"""
full_name=first_name+' '+last_name
return full_name.title()
此时,函数就返回full_name.title。
除此之外,函数还可以返回一些较复杂的值,如字典、列表等
五、传递任意数量的实参
当定义函数却不知道会接受多少个实参时,可以通过定义一个 *形参名 的方式,实现接受任意个实参,*形参名 实际上是定义了一个以形参名为名的元组,并将接受到的所有值都封装到元组中,如:
def user_name(*names):
do something
此外可以结合使用位置实参和任意数量实参,但必须将任意数量实参放到形参列表的最后,如:
def user_name(first_name,*names):
do something
六、任意数量关键字实参
有时候当不知所传递信息时,就要用到任意数量的关键字实参,定义形式为 **形参名 ,这里 **形参名 实际上是定义了一个以形参名为名的字典,用于存储任意数量的键—值对,如:
def user_information(first_name,last_name,**other_infor):
do something…
调用形式如下:
information(‘albert’,‘einstein’,location=‘princeton’,field=‘physics’)
此时,对数据处理时就需要借助方法items(),见前方笔记。
此外,当和位置实参混用时,也要讲其放在形参列表的最后。
七、函数的模块存储
1、什么是模块?
存储函数的独立文件。
2、模块的导入
前提要求:导入模块要与程序在同一目录中。
将存储函数的模块导入程序需要用到的语句为 : import 模块名
导入模块中的所有函数:from 模块名 import *
3、模块函数的调用
(1)调用方法:模块名.函数名(参数),若模块中所有函数均被导入,直接函数名调用即可,无需上述方法。
(2)此外若只想调用模块中特定的函数,调用方法为:from 模块名 import 函数1,函数2…
4、指定别名
(1)为函数指定别名
格式为:from pizza import 原本函数名 as 别名
(2)为模块指定别名
格式为:import 模块名 as 别名