Python语言的高级特性
函数式编程(FunctionalProgramming)
-
基于lambda演算的一种编程方式
- 程序中只有函数
- 函数可以作为参数,同样可以作为返回值
- 纯函数式编程语言: LISP, Haskell
-
Python函数式编程只是借鉴函数式编程的一些特点,可以理解成一半函数式一半Python
- 需要讲述
- 高阶函数
- 返回函数
- 匿名函数
- 装饰器
- 偏函数
返回函数
- 函数可以返回具体的值
- 也可以返回一个函数作为结果
# 定义一个普通函数
def myF(a):
print('In myF')
return None
a = myF(8)
print(a)
In myF None
# 函数作为返回值返回, 被返回的函数在函数体内定义
def myF2():
def myF3():
print("In myF3")
return 3
return myF3
# 使用上面定义
# 调用myF2, 返回一个函数myF3,赋值给f3
f3 = myF2()
print(type(f3))
print(f3)
f3()
<class 'function'> <function myF2.<locals>.myF3 at 0x7f5034036e18> In myF3 3
# 负责一点的返回函数的例子
# args:参数列表
# 1 myF4定义函数,返回内部定义的函数myF5
# 2. myF5使用了外部变量,这个变量是myF4的参数
def myF4( *args):
def myF5():
rst = 0
for n in args:
rst += n
return rst
return myF5
f5 = myF4(1,2,3,4,5,6,7,8,9,0)
# f5的调用方式
f5()
45
f6 = myF4(10,20,30,40,50)
# f5的调用方式
f6()
150
闭包(closure)
- 当一个函数在内部定义函数,并且内部的函数应用外部函数的参数或者局部变量,当内部函数被当做返回值的时候,相关参数和变量保存在返回的函数中,这种结果,叫闭包
- 上面定义的myF4是一个标准闭包结构
# 闭包常见坑
def count():
# 定义列表,列表里存放的是定义的函数
fs = []
for i in range(1,4):
# 定义了一个函数f
# f是一个闭包结构
def f():
return i*i
fs.append(f)
return fs
f1,f2,f3 = count()
print(f1())
print(f2())
print(f3())
9
9
9
▲返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。