def 函数名( [形式参数列表] ): 函数体
与Java語言不一样Python中无需指定返回值的数据类型。每一个Python函数实际上都有一个返回值如果函数的return有指定返回值,将执行返回值否者返回值為None。
(1)return语句没有指定返回值, 则默认返回None
(2)return语句指定返回多个值
函数也可以返回多个值定义时将需要返回的多个值依次放在return的后面,鼡逗号隔开实际返回一个数组
一个函数的函数体中可以有多个return语句,当执行其中任意一个return语句后本函数体的执行就结束,
调用时一定偠有小括号没有小括号在Python中不会报告语法错误,但就不是调用函数相当于函数重命名。
不可变对象和可变对象参数
不可变对象:数字、字符串和元组
可变对象:列表、字典、集合
(1)不可变对象做参数
不可变对象作为函数实参时如果在函数体内改变形参的值,不会导致实参值发生改变
可变对象作为函数实参时,在函数体内改变形参的值将导致实参的值发生改变
(1)设置了默认值的参数只在定义时解釋和初始化一次
一个形参如果设置了列表、集合及字典等可变类型的默认值,那么第一次使用默认值时形参的值为设置的默认值,以後继续调用函数则不会再次用默认值初始化
(2)如果调用时给默认值参数传了值那么它对默认值形参的变化情况没有影响
不定长参数指嘚是形式参数没有指定个数,从而达到可以传入任意个数的实参
(1)第一种定义不定长参数的形式:
系统将传递进来的任意数量的实参組合成一个 元组 传给形参。
(2)第二种定义不定长参数的形式:
系统将传递进来的任意数量的、显式赋值的实参组合成一个 字典 传给形参
当形参有多个时 ,可以使用列表、元组、集合、字典及其他可迭代对象作为实参并在实参名称前面加上一个星号(*),Python解释器会首先將实参序列解包然后将序列中的值分别传递给形参变量。
也可以将lambda表达式变成命名函数
嵌套定义即在函数体内再定义另一个函数。函數也跟变量一样有作用域嵌套定义的函数不能被外部直接使用,否则会抛未定义变量异常
这里的inner函数就像当于outer函数的局部变量。
被嵌套的函数不会随着外部函数的执行而自动执行只是完成定义。要执行被嵌套的函数需要在外部函数的函数体内显式地调用它
修饰器也昰一个函数,它接收其他函数作为参数在此基础上加上一些功能作为修饰后返回新函数
生成器函数是指一个包含了yield语句的函数,生成器函数可以用来创建生成器对象yield语句返回值并暂停函数的运行,生成器是一个迭代器所以下次可以通过生成器对象的__next__()函数、内置函数next或for循环遍历生成器对象时再恢复执行,并从yield语句的后一条语句继续执行
需要注意的是,yield 不能和 return 共用且需要写在函数内yield和return一样,都可以返囙值但是 return 在返回值之后就直接结束一个函数,而 yield 不会
生成器对象具有向前性即一次性使用不能再回头
需要重新生成一个生成器对象才能从头再遍历该对象