Contents
3.15. 函数的闭包类型¶
3.15.1. 函数的闭包¶
延迟求和
#!/usr/bin/env python
#-*- coding:utf8 -*-
#闭包可以实现将参数传递给一个函数,并不立即运行,已达到延迟求值的目的
def delay_fun(x,y):
def caculator():
return x + y
return caculator
if __name__ == '__main__':
print("返回一个求和的函数,并不立即求和。")
msun = delay_fun(3,4)
print()
print("调用求和:")
print(msun())
输出结果
返回一个求和的函数,并不立即求和。
调用求和:
7
闭包泛型函数
#!/usr/bin/env python
#-*- coding:utf8 -*-
def line(a,b):
def aline(x):
return a*x + b
return aline #泛型函数中可使用不同的a、b的值
if __name__ == '__main__':
line23 = line(2, 3) #a、b值分别为4、5的一次函数
line50 = line(5, 0) #a、b值分别为5、0的一次函数
print(line23(4))
print(line50(2))
输出结果
11
10
代码示例1¶
#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2019/5/17 23:31
# filename: 函数类型.py
def calcylate(option):
multiple = 2
# 定义加函数
def add(a, b):
return (a + b) * multiple
# 定义减函数
def sub(a, b):
return (a - b) * multiple
if option == "+":
return add
elif option == "-":
return sub
else:
return
if __name__ == '__main__':
f1 = calcylate("+")
f2 = calcylate("-")
print(type(f1))
print(f1(1, 2))
print(f2(3, 1))
输出结果
<class 'function'>
6
4
使用函数作为返回值¶
#!/usr/bin/env python
# -*- coding:utf8 -*-
# auther; 18793
# Date:2019/6/13 16:16
# filename: 使用函数作为返回值.py
def get_math_func(type):
# 定义一个计算平方的局部函数
def square(n):
return n * n
# 计算立方
def cube(n):
return n * n * n
# 计算阶乘
def factorial(n):
result = 1
for index in range(2, n + 1):
result *= index
return result
# 返回局部函数
if type == "square":
return square
if type == "cube":
return cube
else:
return factorial
if __name__ == '__main__':
math_func = get_math_func("cube") # 得到cube函数
print(math_func(6))
math_func2 = get_math_func("square") # 得到square函数
print(math_func2(8))
math_func3 = get_math_func("other") # 得到factorial函数
print(math_func3(5))
输出结果
216
64
120
使用lambda表达式来替换函数中的局部函数¶
if type == "square":
return lambda n: n * n
if type == "cube":
return lambda n: n * n * n
else:
return lambda n: (1 + n) * n / 2