一、偏函数
偏函数:将函数的某些值给固定住,给你返回一个新的函数,这个函数就是偏函数的功能。
语法:
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