函数就是 一堆准备好的代码 在需要的时候调用 解决代码的冗余 可读性 维护性差
在python中使用 def 函数名 (形参):
def say_hello(name): print('hello python My name '+name) # 注意函数要在方法调用前 声明 say_hello('zzy')
def sum(a,b): c=a+b return c a = sum(1,3) print(a ** 4)
局部变量: 在函数内部定义时 只能在函数内部使用
全局变量: 可以在本类中使用
注意 在函数内部定义一个重名的变量 是创造一个新的局部变量
如果要在函数内部改变 全局变量 加上关键词 global 变量名
locals() 可以查看局部变量
在python中 只有 函数能分割作用域
def hello(x,y): return (x,y) a = hello('zzy','21') print(a)
给定一个形参设置一个默认值 缺省参数要放在最后面
def gg(name,age,city=''): pass
*args表示可变长参数
def gg(name,age,*args): pass gg(1,2,3,4,5)
函数三大要素 函数名 参数 返回值
在python中函数名不能重名
关键字 : lambda student : student 前者是参数 后者是返回值
使用场景 吧匿名函数当作一个参数 传给另一个函数
sorted(iter,fun) 对可迭代对象进行排序
filter(fun , iter) 对可迭代对象进行过滤
age = [12,34,22,17,13] x = filter(lambda age:age>18 , age) # 产生一个可迭代对象 for a in x: print(a)
map(fun,iter) 吧可迭代对象里的每个值都 进行一次函数里的代码块
age = [12,34,22,17,13] x = list(map(lambda item:item+2 , age)) print(x)
reduce(fun,可运算,初始值)
from functools import reduce age = [12,34,22,17,13] print(reduce(lambda e1, e2: e1 + e2, age,0))# 求出所有数据的和 ((((12+34)+22)+17)+13) 先加成一个值赋给e1 下一个值赋给e2
函数作为参数 lambda filter map reduce
函数作为返回值 注意返回的是函数本身 还是返回调用函数执行结果
函数内部再定义一个函数
在一个函数中 定义另一个函数 内部函数中使用外部函数的变量 叫做闭包
def a(): x = 0 def b(): nonlocal x # 注意 在内部函数中要想改变外部函数的值 要使用nonlocal 关键字 不然是生成一个新的变量 x=2 return b
def a(fn): def b(d,e): return fn(d,e) #也就是把c函数放到了b函数中 而调用的函数c函数 是b函数 return b @a # 装饰器 定义 def c(d,e): f=d+e return f print(c(1, 2))