函数
def 关键字创建函数;
def FirstFunction():
-----方法体
调用函数,通过方法名调用:FirstFunction()
函数的参数:
def SecondFunction(name):
-----print(name,"hahaha")
调用时,内部参数不能为空
形参和实参
函数定义过程中的参数称为形参;因为它只是一个形式,表示占据一个参数位置;
而调用函数过程中传递进去的参数叫做实参,因为它是具体的参数值;
函数文档
函数说明书
在函数的函数体第一行不用注释的方式字符串也不会报错;
def numTwo(x):
'函数文档'
result=""
returnresult
函数文档的调用:numTwo.__doc__ --->'函数文档'
关键字参数
def SaySome(name,word):
SaySome(name="英语",word="english")
这样,即使顺序搞混,也能根据关键字找到其对应的实参
默认参数
def SaySome(name="英语",word="english"):
SaySome() 也可以运行,因为它有默认参数
SaySome("英语","english") 运行,就会替代默认参数
收集参数
def test(*params):
----print("参数长度:",len(params))
----print("第二个参数:",params[1])
test(1,'英语',2,3,4,5,7) --->参数长度:7 第二个参数:英语
收集参数就是将实参通过元组的方式放到params里面,如果收集参数后边还想加参数,那么就需要使用关键字参数进行指定。
函数与过程
函数:有返回值
过程:简单,特殊并且没有返回值
python只有函数,没有过程
返回值
有返回就返回,无返回返回None
可返回多个元素,相当于返回元组
局部变量
只在被定义的方法中可以使用
全局变量
可以在整个.py文件中使用,
如果要在函数内试图改变全局变量,那么python会在函数内新建一个同名的局部变量。也就是说,在函数内无法改变全局变量
global关键字
在函数内部用global 声明的全局变量,可以在函数内部修改
内嵌函数
如图:
只能在fun1内部调用fun2,在fun1外面不能调用fun2
闭包(编程范式)
内部函数修改外部函数变量方法1
使用列表的方式可以修改
nonLocal
内部函数修改外部函数的变量方法2
Lambda表达式
一个参数:
g=lambda x:2*x+1
g(5)-->11
多个参数:
g=lambda x,y:x+y
g(5,6)-->11
Python写一下执行脚本时,使用lambda就可以省下定义函数过程,比如我们只是需要写个简单的脚本来管理服务器时间,我们就不需要专门定义一个函数然后在写调用,使用lambda就可以是的代码更加精简
对于一下比较抽象并且整个程序执行下来只需要调用一两次的函数,有时候给函数起个名字也是比较头疼的问题,使用lambda就不需要考虑命名的问题了
简化代码的阅读性
两个比较牛逼的BIF
filter() :两个参数function/none和iterable;如果第一个参数是一个函数的话,则将第二个可迭代数据里的每一个元素作为函数的参数进行计算,把返回True的值给筛选出来,变成一个列表。如果第一个参数为None,则将第二个参数里面True的值筛选出来,变成一个列表。
filter(None,[1,0,False,True])--->可迭代的对象
list(filter(None,[1,0,False,True]))--->[1,True]
map():两个参数,一个函数和一个可迭代的序列,将序列里的每一个元素作为函数的参数进行加工,生成一个新的可迭代的序列;
map和filter的区别:
map是根据一定条件对数据进行加工,filter是根据进行一定条件对数据进行过滤