1.函数文档
def myFirstFun(): """ hahaha, 这是函数文档哦 """ return "返回成功" print(myFirstFun()) print(myFirstFun.__doc__)
运行结果:
PS D:PythonWorkSpace> & D:/Python/python.exe d:/PythonWorkSpace/.vscode/test.py
返回成功
hahaha,
这是函数文档哦
2.函数参数
若函数的参数个数不确定,再定义函数的时候,形参就可以使用收集参数来搞定,仅需在参数前面加上星号(*)即可。
#函数参数个数 def mySecondFun(*params): print("有%d个参数" %len(params)) print("最后一个参数是:",params[len(params)-1]) mySecondFun("aa") mySecondFun("a","b","c")
运行结果:
有1个参数
最后一个参数是: aa
有3个参数
最后一个参数是: c
3.嵌套函数
def fun1(): print("我是函数1正在执行") def fun2(): print("我是函数2正在执行") fun2() fun1()
运行结果:
我是函数1正在执行
我是函数2正在执行
4.闭包中局部变量的修改注意事项
#闭包中局部变量修改注意事项 def fun1(): x=1#x为fun1中的局部变量 def fun2(): x=x+1 print(x) fun2() fun1()
运行结果:
Traceback (most recent call last): File "d:PythonWorkSpace.vscode est.py", line 142, in <module> fun1() File "d:PythonWorkSpace.vscode est.py", line 141, in fun1 fun2() File "d:PythonWorkSpace.vscode est.py", line 139, in fun2 x=x+1 UnboundLocalError: local variable 'x' referenced before assignment
可以看到,提示未知局部变量错误原因为fun2调用x时,是局部变量,fun1的x变量呗屏蔽,所以抛出错误
更改方法:在Python3版本后,加一关键字nonlocal即可
#闭包中局部变量修改注意事项 def fun1(): x=1#x为fun1中的局部变量 def fun2(): nonlocal x x=x+1 print(x) fun2() fun1()
运行结果:2
5.装饰器
个人理解:装饰器的存在意义是想让函数更易于扩展
具体用法:,一般在调用函数前加"@语法糖",类似于Java的注解
#装饰器 def log(func): print("开始记录日志") def wrapper(*params): print("开始调用func函数") func(*params) print("调用func结束") print("开始调用wrapper") return wrapper @log def eat(*params): print("参数长度",len(params)) print("%s最能吃" %params[0]) print("%s最瘦" %params[1]) eat("小贾","小吴","小王","小郑")
运行结果:
开始记录日志 开始调用wrapper 开始调用func函数 参数长度 4 小贾最能吃 小吴最瘦 调用func结束
如果装饰一层觉得不够,还可以再一层一层套装饰器,,如
@Buffer @performance @log def eat(name): print("%s开始吃饭了"%name)
执行时候就为调用buffer(performance(log(eat)))
6.lambda
Python中用lambda关键字来创建匿名函数
基本语法:使用冒号(:)分割函数的参数及返回值,冒号左边放置函数参数,如果有多个参数,使用逗号(,)分开即可,冒号右边是函数的返回值
g=lambda x,y: x*y-2 print(g(2,3))
运行结果:4
7.filter
filter函数是一个过滤器,filter有两个内置参数,第一个通常是函数,第二个是要筛选的对象,可以使列表等
具体用法:
筛选奇数:
temp=filter(lambda x: x%2,range(10)) print(list(temp))
运行结果:
[1, 3, 5, 7, 9]
8.map
map也有两个内置函数,也是一个函数和一个可迭代对象,将可迭代对象作为函数参数进行运算加工,直到每个元素加工完毕。
#map映射 temp=map(lambda x: x*2,range(10)) print(list(temp))
运行结果:
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
map也支持多个可迭代对象,迭代方法为长度较短的迭代结束为止
temp=map(lambda x,y:x+y,[1,2,3],[10,20,30,40,50,60]) print(list(temp))
运行结果:
[11, 22, 33]