(一)创建函数
函数名(形参列表)
语句块
调用函数
函数名(实参列表)
函数外部无妨访问函数内部的局部变量
函数内部可以访问函数外部的变量,但不能修改函数外部变量的绑定关系
(二)return
用于函数中 返回到调用该函数的地方,同时返回表达式的引用关系
1. return语句后跟的表达式可以省略,省略后相当于return None
2. 如果函数内没有return语句,则函数执行完最后一条语句后返回None(相当于在最后加了一条 return None语句)
(三)函数的参数传递
位置传参,序列传参,关键字传参,字典关键字传参
函数的综合传参:
位置传参在前,关键字传参在后
函数的缺省参数
语法:def 函数名(形参名1=默认实参1,形参名2=默认实参2,..)
1.缺省参数必须自右至左依次存在,如果一个参数有缺省参数,则其右侧所有参数都必须有缺省参数
函数参数自左至右的顺序依次为:
位置形参
星号元组形参
命名关键字形参
双星号字典形参
局部变量:
1. 定义在函数内部的变量称为局部变量(函数的形参也是局部变量)
2. 局部变量只能在函数内部使用
3. 局部变量在函数调用时才能够被创建,在函数调用结束之后会自动销毁
全局变量:
1. 定义在函数外部,模块内部的变量称为全局变量
2. 所有的函数都可以直接访问"全局"变量,但函数内部不能直接通过赋值语句来改变全局变量
globals() 函数和locals 函数
globals() 返回当前全局作用域内变量的字典
locals() 返回当前局部作用域内的变量的字典
nonlocal
1.nonlocal语句只能在被嵌套的函数内部进行使用
2.访问nonlocal变量将对外部嵌套函数作用域内的变量进行操作
3.当有两层或两层以上函数嵌套时,访问nonlocal变量只对最近的一层变量进行操作
4.nonlocal语句的变量列表里的变量名,不能出现在此函数参数列表中
lambda 表达式(又称匿名函数)
lambda [形参1, 形参2, ...] : 表达式
1. lambda 只是一个表达式,它用来创建一个函数对象
2. 当lambda表达式调用时,先执行冒号(:)后的表达式,并返回表达式的结果的引用
3. lambda 表达式创建的函数只能包含一条表达式
4. lambda比函数简单且可以随时创建和销毁,有利于减少程序的偶合度
(四)高阶函数
1.函数接收一个或多个函数作为参数传入
2.函数返回一个函数
map()
map(func, *iterables) 用函数和对可迭代对象中的每一个元素作为参数返回新的可迭代对象.当最短的一个可迭代对象不再提供数据时迭代结束
要求:
func函数接收的参数个数必须与可迭代对象的个数相同
filter()
filter(function, iterable)
作用:
筛选可迭代对象iterable中的数据,返回一个可迭代对象,此可迭代对象将对iterable提供的数据进行筛选
说明:
函数function 将对iteralbe中的每个元素进行求布尔值,返回True则保留,返回False则丢弃
sort()
作用:
将原可迭代对象提供的数据进行排序,生成排序后的列表
格式:
sorted(iterable, key=None, reverse=False)
说明:
iterable 可迭代对象
key 函数是用来提供一个排序参考值的函数,这个函数的返回值将作为排序的依据
reverse 标志用来设置是否降序排序
函数递归 几乎所有递归都能用while True 实现
递归是调用自身,先假设函数已经实现
闭包 closure
闭包是指引用了此函数外部嵌套函数作用域变量的函数
闭包必须满足三个条件:
1. 必须有内嵌函数
2. 内嵌函数必须引用外部函数中的变量
3. 外部函数返回值必须是内嵌函数.