8.1 定义函数
函数定义,向Python指出函数名,还可能在括号内指出函数为完成其任务需要什么样的信息。
1、向函数传递信息
在函数定义的括号内添加变量,通过在这里添加变量,就可以让函数接受你给变量指定的任何值。
2、实参和形参
函数中的变量是一个形参 ---- 函数完成其工作所需的一项信息。
在代码中变量的赋值是一个实参 ---- 实参是调用函数时传递给函数的信息。
8.2 传递实参
1、位置实参
调用函数时,每个实参都要关联到函数定义中的一个形参,最简单的关联方式是基于实参的顺序。这种关联方式被称为位置实参。
调用函数可以多次。
位置不能搞错。
2、关键字实参
是传递给函数的名称-值对。直接在实参中将名称和值关联起来,因此向函数传递时不会混淆,也无需考虑位置。
3、默认值
编写函数时,可以给每个形参指定默认值。在调用函数中给形参提供实参时,Python将使用实参值,否则,将使用默认值。
4、等效的函数调用
可以混合使用位置实参,关键字实参和默认值,通常有多种等效的函数调用方式。
5、避免实参错误
提供的实参,不能多于或者少于形参的数量。
8.3 返回值(重要)
函数并非总是直接显示输出,相反,它可以处理一些数据,并返回一个或一组值。函数返回的值被称为返回值。在函数中,可使用return语句将值返回到调用函数的代码行。返回值让你能够将程序的大部分繁重工作移到函数中去完成。从而简化主程序。
意思是调用函数,将所有形参赋值实参后,根据函数代码进行数据运算,并且把运算结果返回至函数中,在return语句中生成调用代码行。并且对所调用函数生成一个变量储存函数的值。下次调用该变量即为调用相应实参的函数,并且直接调用return的函数值。
如果没有return语句,函数会默认返回一个none。也就是有了return语句之后这个函数实参之后就有值,否则就是没有值。
1、返回简单值
在函数定义通过形参接受实参。并将结果存储至函数内变量中。并将结果用return语句返回到函数调用行。调用返回值的函数时,需要提供一个变量,用于存储返回的值。
2、让实参编程可选的
如果部分形参是可选的,非必须要给予实参的。可以将其设置为空字符串,并放置在形参排序的末尾。
3、返回字典
函数可返回任何类型的值,包括列表和字典等较复杂的数据结构。
4、结合使用函数和while循环
8.4 传递列表
向函数传递列表很有用,这种列表可能包含字符串、数值、列表或者字典等。将列表传递给函数后,函数就能够直接访问其内容。相当于将代码封装在函数内。函数内的形参相当于是一个列表,实参也需要是列表。
1、在函数中修改列表
程序设计的一个理念,每个函数完成一项工作。
2、禁止函数修改列表
为了保持原列表不被修改或者删成空列表,在传递列表是可以传递列表的副本而不是元件。 ---- function_name(list_name[:]) ---- 切片表示法[:]创建列表副本。
8.5 传递任意数量的实参
function(*parameter) ---- 形参中的*号使得Python创建一个空元组的形参,并将收到的所有值都封装在这个元组中。
1、结合使用位置实参和任意数量实参
如果要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后。
2、使用任意数量的关键字实参
有时候,需要接受任意数量的实参,但预先不知道传递给函数的会是什么样的信息。这种情况下,可将函数编写成能够接受任意数量的键值对。
形参的格式 ---- **parameter 实参的格式 ---- key= value
8.6 将函数存储在模块中
1、导入整个模块
创建一个函数模块,在同一目录下创建另一个调用模块的py文件。import module导入模块,采用module_name.function_name()方式使用模块。
2、导入特定的函数
from module_name import function_name ---- 如果只想要导入函数,不用整个模块导入,可以使用上述导入方式,使用时值需要funciton_name(),不用加module_name直接调用
3、使用as给函数指定别名
from module_name import function_name as nick_name ---- 将导入的函数以nick_name起别名。
4、使用as给模块指定别名
import module_name as nick_name ---- 将模块指定别名,在调用时使用nick_name.function_name()
5、导入模块中的所有函数
使用*运算符可让python导入模块中的所有函数。可通过名称来调用每个函数,无需使用句点表示法 ---- from module_name import *
注意:如果模块中有函数的名称与你项目中使用的名称相同,可能导致意想不到的结果。python可能遇到多个名称相同的函数或变量,进而覆盖函数,而不是分别导入函数。
8.7 函数编写指南
应该给函数指定描述性名称,描述性名称可帮助你和别人明白代码想要做什么
每个函数都应该包含简要的阐述其功能的注释,注释应紧跟在函数定义后面。
给形参指定默认值时,等号两边不要有空格。对于函数调用中的关键字实参,也要遵循这种约定。
如果形参很多,导致函数长度超过79字符。可在定义函数中输入左括号,并在下一行连恩两个Tab键,从而将形参列表和只缩进一层函数体区分开来。
如果程序或模块包含多个函数,可使用空两行将相邻的函数分开。