函数
函数
函数定义和类型
对某一功能的封装
函数定义
def 函数名称(参数): 函数体代码 return 返回值别忘了定义函数名后面加冒号“:”
函数调用:函数名(参数)
函数参数
形参:定义函数时设置的参数
实参:调用函数时传入的参数
无参函数
有参函数
带有返回值的函数
局部变量、全局变量
局部变量
函数内部定义的变量
不同函数内的局部变量可以定义相同的名字,互不影响
作用范围:函数体内有效,其他函数不能直接使用
全局变量
函数外部定义的变量
作用范围:可以在不同函数中使用
在函数内使用global关键字实现修改全局变量的值
全局变量命名建议以g_开头,如:g_name
基本操作
想通过在函数内直接修改全局变量的方式是错误的,相当于在函数体内定义了一个与全局变量同名的局部变量。
全局变量不能在函数体内被直接通过赋值而修改。函数体内被修改的那个”全局变量“其实只是函数体内定义的一个局部变量,只是名称相同而已。所以,通过在函数体内直接对全局变量赋值是无法改变其值的。
应该在函数体内用global声明全局变量,才能修改:
全局变量定义的位置应当放在调用它的函数之前,不然会出错。
原因:python解释器从上到下逐行执行,那当执行此函数时,函数之后的变量是不存在的。
正确的全局变量定义方法:
在函数调用之前就把全局变量定义好
全局变量的类型为字典、列表时,在函数体内修改你值时,可不使用global关键字。
函数缺省参数、不定长参数、命名参数
缺省(默认)参数
函数定义带有初始值的形参
函数调用时,缺省参数可传,也可不传
缺省参数一定要位于参数列表的最后
缺省参数数量没有限制
命名参数
调用带有参数的函数时,通过指定参数名称传入参数的值
可以不按函数定义的参数顺序传入
不定长参数
函数可以接受不定个数的参数传入
def function([formal_args,]*args)函数调用时,传入的不定参数会被封装成元组
def function([formal_args,]**args)函数调用时,如果传入key=value形式的不定长参数,会被封装成字典
拆包
对于定义了不定长参数的函数,在函数调用时需要把已定义好的元组或者列表传入到函数中,需要使用拆包方法
缺省参数
命名参数
不定长参数
1、元组:*args
2、字典:**args
接受key:value对,然后封装到字典里
不定长参数综合使用+拆包
递归函数及应用
函数调用自身
注意:递归过程中要有用于结束递归的判断
递归函数
匿名函数及应用
匿名函数:定义的函数没有名称
用lambda关键字创建匿名函数
定义:lambda[参数列表]:表达式
匿名函数可以作为参数被传入其他函数
匿名函数
应用场景:
作为函数的参数
作为内置函数的参数
python内置函数
enumerate()
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
以下是 enumerate() 方法的语法:
参数:
sequence -- 一个序列、迭代器或其他支持迭代对象。
start -- 下标起始位置。
返回值:
返回 enumerate(枚举) 对象。
实例:
for循环使用 enumerate:
Last updated
Was this helpful?