函数的基本定义是:为了实现一个特定功能的语句集合
#函数的基本定义
def 函数名(形式参数):
函数体
在函数调用的过程中,函数本身并不关心实际参数会怎么样,因为python一般情况下是通过赋值的形式将实参的值传递给形参。
Python中存在无返回值和有返回值函数,一般在函数体中通过return返回处理结果;无返回值情况,是python自动帮助我们在函数体末尾加上了return None
语句。存在返回值的函数需要在主程序中用变量来存储处理结果
当函数需要返回多个处理结果的情况下,直接在返回语句中跟上多个处理结果即可
return 处理结果1 处理结果2 处理结果3
返回多个处理结果时候,存在两种情况:
调用函数的时候,实际上存在两种参数传递的方式:
调用函数名(形参名=值)
,可以改变已经被函数定义好的参数传递顺序python允许在定义函数的时候,声明形参的默认值,称为默认参数。
#带有默认参数的函数定义方式
def 函数名(非默认参数 , 参数名 = 默认值, ...):
函数体
python允许函数定义时,定义参数位可变长参数,即主程序可以向函数传递多个参数
#可变长参数函数定义
def 函数名(* args):#使用 *形参名字 的形式定义可变长参数
函数体
函数会将主程序传递的多个参数合成为一个元组来处理。同样的普通参数需要放置在可变长参数之前。
在可变长参数中使用**定义形式参数,python会将形式参数转变成一个字典的形式,主程序需要使用关键参数的形式传递参数。所有传递的参数都会被当成字典的元素处理。
如果主程序需要使用序列作为实参传递给函数,那么函数需要满足两个条件:
*
,并且序列中的元素需要和形参的变量个数相匹配。(这里的*可以认为是一种可变长变量的自动拆装符号,也就是说,在接受或者准备拆成多个单变量的多变量参数前使用);普通变量和序列变量混合传递的情况下,带有 *
的变量需要放在最后。在单个模块中,函数体外部定义的变量就可以视作全局变量,能够被本模块区全局识别和使用
一般情况下,在函数体内部定义的变量就是局部变量,只能被函数体本身识别。
在函数体内部声明的局部变量,可以通过关键字global
转变为全局变量,但只能够在还没有被执行的剩下的模块内的语句中被识别和使用。
为了保证程序的正确性和模块化程度,尽可能的不在函数体内部直接使用全局变量,而是通过参数传递的方式使用全局变量。并且尽可能的少在函数体内部使用golbal关键字
在函数体内部对形参的修改会同步到实参中需要看传递的实参是否是可变对象。
生成器是一种特殊的迭代器,它利用关键字yield
以惰性的方式逐一返回元素。当执行函数体时遇见关键字yield
会直接返回它后面的值,并且保留本次函数的执行信息。直到下一次主程序调用next函数时,重新回到当前位置继续执行