一、创建
def funcName():
正文
def define缩写,意为定义
funcName 函数名
: 后跟函数内容,要有缩进
函数内可用以下形式加入函数文档
"""
函数描述
"""
函数文档可通过help(funcName)查看
()括号内为形参
二、调用
直接调用 funcName(),括号内补充实参
三、参数
形参 函数定义时,括号内为形参,多个参数用逗号隔开
实参 函数调用时,括号内为实参,与形参一一对应,这种位置固定的参数也叫位置参数
关键字 函数调用时,以”形参名 = 实参“的形式,指定形参的内容,就可以无视形参顺序,叫做关键字参数,和位置参数混用时,位置参数必须在关键字参数之前
默认参数 定义函数时,可以直接给形参赋值,这叫默认参数
收集参数 定义函数时,形参前加*代表收集参数,这样函数会把不固定数量的实参打包成元组传入,收集参数只可以和关键字参数混用,否则无法分辨参数是否是收集参数,如果加**,代表参数被打包成字典的形式
四、返回值
返回值 函数体中return后跟返回值,python中不用特意定义返回值类型
五、变量与作用域
1、局部变量与全局变量
定义在函数内部的是局部变量,只能在函数内部使用,定义在函数外的是全局变量,可以在函数外调用,在函数内修改全局变量,修改只在函数内生效,而且函数内尽量不要修改全局变量,如果一定要修改,就要使用global关键字,先使用 “global+全局变量名”后,才可以修改
2、内嵌函数
python可以在函数内定义函数,叫做内嵌函数,内嵌函数的作用域在被包含的函数之内,因此只能在被包含的函数内调用
3、LEGB原则
python内变量查找原则为LEGB原则,指的是查找的先后顺序具体如下
• L-Local:函数内的名字空间。
• E-Enclosing function locals:嵌套函数中外部函数的名字空间。
• G-Global:函数定义所在模块的名字空间。
• B-Builtin:Python内置模块的名字空间。
4、闭包
在计算机科学中,闭包(closure)是词法闭包(lexical closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。闭包在运行时可以有多个实例,不同的引用环境和相同的函数组合可以产生不同的实例。
在python中,内嵌函数使用了外部函数的参数就叫做闭包
5、装饰器
装饰器可以简单理解为在函数外再对函数做一层修饰,闭包可以很容易实现装饰器的功能
使用@语法糖可以更方便的实现装饰器功能,使用方式大致是将装饰器函数名前加@放在被装饰函数上一行如
@装饰器函数名
def 被装饰函数名():
被装饰函数体
六、匿名函数使用
1、匿名函数与lambda关键字(表达式)
python 匿名函数可以使用lambda关键字创建,也叫lamda表达式
基本语法是使用冒号(:)分隔函数的参数及返回值:冒号的左边放置函数的参数,如果有多个参数,使用逗号(,)分隔即可;冒号右边是函数的返回值。执行完lambda语句后实际上返回一个函数对象,如果要对它进行调用,只需要给它绑定一个临时的名字即可。例:
lambda y :x + y
2、filter()
使用特定函数筛选可迭代对象中的元素,返回结果为true的值。第一个参数是函数也可以是None,第二个参数是可迭代对象
3、map()
映射函数,使用特定函数处理迭代对象,与filter类似,不过第二个可迭代对象参数为收集参数,且每个收集参数长度可以不一致,最短对象迭代完成后就会返回结果