高性能网站建设书籍,网站建设的技术标准,网站开发仿站,杭州翰臣科技有限公司目录1.偏函数2.高阶函数3.返回函数4.匿名函数5.闭包1.偏函数 概念 当我们写一个参数比较多的函数时#xff0c;如果有些参数#xff0c;大部分场景下都是某一个固定值#xff0c;那么为了简化使用#xff0c;就可以创建一个新函数#xff0c;指定我们要使用的函数的某个…
目录1.偏函数2.高阶函数3.返回函数4.匿名函数5.闭包1.偏函数 概念 当我们写一个参数比较多的函数时如果有些参数大部分场景下都是某一个固定值那么为了简化使用就可以创建一个新函数指定我们要使用的函数的某个参数为某个固定的值这个新函数就是“偏函数” 语法 方式一 自己写一个新的方式二 借助functools模块的partial函数
def test(a,b,c,d1):print(abcd)test(1,2,3)#输出为 7
#此时如果test函数中的d的值总是为1可以把d设置成默认值但是现在d改变成2了我们不能直接修改原函数
#方式一
#test2函数就称为偏函数
def test2(a,b,c,d2):test(1,2,3)
test2()#输出 8#方式二
import functools
newFunc functools.partial(test,d2)
newFunc()#输出 82.高阶函数 概念 当一个函数A的参数接收的是另一个函数时则把这个函数A称为高阶函数 注意事项 函数也可向数据一样相互传递
#高阶函数举例 sorted函数中key的参数就可以是函数
l [{name:lz2,age:18},{name:lz1,age:12},{name:lz3,age:25},{name:lz5,age:23}]
def getKey(x):return x[age]
result sorted(l,keygetKey)
print(result)#输出 [{name: lz, age: 12}, {name: lz, age: 18}, {name: lz, age: 23}, {name: lz, age: 25}]
def getKey(x):return x[name]
result sorted(l,keygetKey)
print(result)#输出 [{name: lz1, age: 12}, {name: lz2, age: 18}, {name: lz3, age: 25}, {name: lz5, age: 23}]#举例 动态计算
def caculate(num1,num2,caculateFunc):print(caculateFunc(num1,num2))
def sum(a,b):return ab
def jianfa(a,b):return a-b
caculate(5,6,sum)#11
caculate(16,4,jianfa)#123.返回函数 概念 是指一个函数内部它返回的数据是另外一个函数把这样的操作称为“返回函数”
# 举例 根据不同参数返回不同函数
def getFunc(flag):# 1.定义几个函数def sum(a, b, c):return a b cdef jianfa(a, b, c):return a - b - c# 2.根据不同的flag的值来返回不同的操作函数if flag :return sumelif flag -:return jianfa
result getFunc()
print(result(10, 20, 30))#输出为 604.匿名函数 概念 匿名函数也称为 “lambda函数”是指没有名字的函数 语法 lambda 参数1参数2…表达式限制 只能写一个表达式 不能直接return表达式的结果就是返回值只适用于一些简单的操作处理
#匿名函数
result (lambda x,y :xy)(1,2)
print(result)#输出 3newFunc lambda x,y :xy
print(newFunc(1,2))#输出 3#作用 一些简单的函数不用定义
l [{name:lz2,age:18},{name:lz1,age:12},{name:lz3,age:25},{name:lz5,age:23}]
result sorted(l,keylambda x:x[age])
print(result)#输出 [{name: lz, age: 12}, {name: lz, age: 18}, {name: lz, age: 23}, {name: lz, age: 25}]5.闭包 概念 在函数嵌套的前提下 内层函数引用了外层函数的变量包括参数 外层函数又把内层函数当做返回值进行返回 这个内层函数所引用的外层变量 称之为闭包 应用场景 外层函数根据不同参数来生成不同作用功能的函数 注意事项 闭包中如果要修改引用的外层变量需要使用nonlocal变量 声明 否则当做是闭包内新定义的变量当闭包内引用了一个后期会发生变化的变量时。函数只有被调用的时候函数内部的值才会被确定
#闭包举例 标准格式
def test():a 10def test2():print(a)return test2newFunc test()
newFunc()#输出 10#闭包注意事项一 nonlocal声明
def test():num 10def test2():#nonlocal num要加这个num 666print(num)return test2newFunc test()
newFunc()#输出 666 因为没有加nonlocal声明成全局变量 #闭包注意事项二
def test():num 10def test2():print(num)num 11return test2newFunc test()
newFunc()#输出 11 此时程序是先走num 10然后是num 11,函数test2()没有被调用所有不执行当走到newFunc()时test2()函数才被调用def test():funcs []for i in range(1,4)def test2():print(i)funcs.append(test2)return funcs
newFunc test()
newFunc[0]()#3
newFunc[1]()#3
newFunc[2]()#3
#当循环在进行的时候输出语句中的i是一个标识符没有具体的值当调用函数时 i 3 所有输出的都是3 而不是1 2 3 #如果想要输出 1 2 3 就要每遍历一次函数调用一次
def test():funcs []for i in range(1,4):def test2(num):def inner():print(num)return innerfuncs.append(test2(i))return funcs
newFunc test()
newFunc[0]()#3
newFunc[1]()#3
newFunc[2]()#3