Python的偏函数、回调函数、返回函数、闭包、递归函数(day08)

一、偏函数

偏函数:将函数的某些值给固定住,给你返回一个新的函数,这个函数就是偏函数的功能。
语法:

import functool
newfunc = functool.partial(func,参数)
# 普通方法
print(int("1000011",base=2))    # 67
print(int("1100001",base=2))    # 77
print(int("1110011",base=2))    # 115
print(int("1111111",base=2))    # 127

# 自定义函数
def int2(str1,base=2):
    return int(str1,base)
print(int2("1000111"))    # 67
print(int2("1100001"))    # 77
print(int2("1110011"))    # 115
print(int2("1111111"))    # 127

# 使用偏函数固定base的值
import functools
int3 = functools.partial(int,base=2)
print(int3("1000111"))    # 67
print(int3("1100001"))    # 77
print(int3("1110011"))    # 115
print(int3("1111111"))    # 127

二、回调函数

回调函数:将函数作为参数传递到另外一个函数中,这个被传递进去,后来又被调用的函数,我们称之为回调函数。

def func1(a):    # 回调函数1
    print("***********")

def func2(a):    # 回调函数2
    print("!!!!!!!!!!!")

def func3(a):    # 回调函数3
    print("???????????")

def Func(func,a):
    return func(a)

Func(func1,"a")    # ***********
Func(func2,"a")    # !!!!!!!!!!!
Func(func3,"a")    # ???????????

三、返回函数

返回函数:把函数作为返回值返回的时候,我们可以称这个函数为返回函数

def f():
    print('外函数')
    def g():
        print('内函数,被返回的函数')
    return g

f()
print("-"*20)
print(f()())

外函数
--------------------
外函数
内函数,被返回的函数

四、闭包

闭包:在外函数的内部定义了一个内函数,内函数使用了外函数的临时变量,外函数的返回值是内函数的引用【内函数的函数名】,这时候就构成了一个闭包。

一般情况下当函数执行完毕,函数中所有的东西都会被释放掉还给内存,这时候局部变量也会消失,但是当外函数结束的时候,发现自己还有临时变量在内函数中还会使用,此时外函数会将自己的临时变量绑定内函数,自己再结束。

函数中的变量在函数被调用的时候创建,在函数执行结束的时候被销毁。

装饰器一定是闭包,但是闭包不一定是装饰器。

def outerfunc():
    list1 = []
    for x in range(10):
        def inner():
            return x
        list1.append(inner)
    return list1

list1 = outerfunc()
for f in list1:
    print(f())

9
9
9
9
9
9
9
9
9
9

五、递归函数

递归函数:函数在内部是可以调用其他函数的,当被调用的函数是函数自己本身的时候,我们称这个函数为递归函数。(使用递归函数的时候,一定要注意栈溢出的情况,且一般情况下不建议使用递归函数。)

# 斐波那契数列
def func2(n):
    if n==1 or n==2:
        return 1
    else:
        return func2(n-1)+func2(n-2)

print(func2(3))    # 2
print(func2(4))    # 3
print(func2(5))    # 5
print(func2(6))    # 8
print(func2(7))    # 13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值