1.返回函数
函数的返回值也可以是函数
def food(name): #外函数
def prepare(): #内函数
print(f"[{name}]制作步骤:备菜...") #内部函数可以使用外部函数的变量
def cook():
print(f"[{name}]制作步骤:烹饪...")
def serve():
prepare()
cook()
print(f"[{name}]制作步骤:上菜!")
return serve
m = food("番茄炒蛋")
f = food("小鸡炖蘑菇")
f()
m()
def food(name): #外函数
def cook():
print(f"[{name}]制作步骤:烹饪...")
def prepare():
print(f"[{name}]制作步骤:备菜...")
def serve():
prepare()
cook()
print(f"[{name}]制作步骤:上菜!")
return (prepare,cook,serve)
m=food("番茄炒蛋")
f=food("小鸡炖蘑菇")
m[2]()
f[2]()
2.闭包函数
def func():
a=5
def innner(): #闭包函数
print(a) #通过使用外部函数的变量,延长了变量的使用时间
return inner
#算是一种语法糖
func=outer() #外部函数调用后,返回内部函数的地址
#执行闭包函数
func() #通过内部函数的地址,完成内部函数的调用
适用场景
def test(a,b):
def test_in(c):
print(a*b+c)
return test_in
num=test(1,1)
#执行内部函数
num(2)
num(3)
num_02=test(2,2)
num_02(2)
num_02(3)
3.偏函数
当函数的参数个数太多,需要简化时,使用functools.partial可以创建一个新的函数,这个新函数可以固定住原函数的部分参数,从而在调用时更简单。
a=int("1100",base=10) #强制类型转换函数,按照10进制打印
print(a,type(a))
a=int("0b1111",base=2) #强制类型转换函数,按照2进制打印
print(a,type(a))
1100 <class ‘int’>
15 <class ‘int’>
#设置base默认值为2
def int2(x,base=2):
return int(x,base=base)
x=int2("1100")
print(x)
x=int2("1100",base=10)
print(X) #输出结果:1100
import functools
int2=functools.partial(int,base=2) #定义新的函数,等同于:将参数base默认为2的int函数
print(type(int2))
x=int2("1100")
print(x)
#int2仅仅是设定了默认值,也可以将默认值修改为其他值
x=int2("1100",base=10)
print(x)
输出结果:
<class ‘functools.partial’>
12
1100
#可以使用functools.partial创建一个偏函数,第一个参数是函数名,第二个是设定默认值的参数名字
# 比如求除k取余数的函数
import functools
def getyunum(x,y):
return x%y
getyunum1=functools.partial(getyunum,y=2)
num1=getyunum1(8)
num2=getyunum2(9)
print(num1,num2)