Python

1、高阶函数

2019-04-27  本文已影响141人  代码充电宝
(1)函数式编程
(2)高阶函数
# 将函数赋值给一个变量
>>> abs
<built-in function abs>
>>> a = abs
>>> a(-20)
20
# 将abs函数变成了长度函数
>>> abs = len
>>> abs(-10)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: object of type 'int' has no len()
>>> abs([1,2,3])
3
#计算两个数的绝对值之和
def add(x,y,f):
    return f(x)+f(y)
print add(-5,9,abs)
(3)内置高阶函数
L = [1,2,3,4,5,6,7,8,9]
def aa(x):
    return x*x
mmp = map(aa,L)
# <map object at 0x10de725c0>
print(mmp)
# [1, 4, 9, 16, 25, 36, 49, 64, 81]
print(list(mmp))
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(L)
from functools import reduce
L = [1,2,3,4]
def aa(x,y):
    return x+y
# 20
print(reduce(aa,L,10))
print(L)
# 计算初始值和第一个元素:f(10, 1),结果为11
# 先计算头两个元素:f(11, 2),结果为13
# 再把结果和第3个元素计算:f(13, 3),结果为16
# 再把结果和第4个元素计算:f(16, 4),结果为20
def is_not_empty(s):
    return s and len(s.strip())>0
res = filter(is_not_empty,['test', None, '', 'str', '  ', 'END'])
# <filter object at 0x10c7c0748>
print(res)
# ['test', 'str', 'END']
print(list(res))
L = [36, 5, 12, 9, 21]
# 默认升序 [5, 9, 12, 21, 36]
print(sorted(L))
# 指定key排序 [36, 21, 12, 9, 5]
print(sorted(L,key = lambda x:-x))
# 指定key排序 [5, 9, 12, 21, 36]
print(sorted(L,reverse=False))
# [36, 5, 12, 9, 21]
print(L)
(4)闭包-保存函数状态
def sum_stat(list):
    def sum():
        return len(list)
    return sum
middle = sum_stat([1,2,3,4])
# <function sum_stat.<locals>.sum at 0x1019e28c8>
print(middle)
# 4
print(middle())
# 4
print(sum_stat([1,2,3,4])())
def count():
    fs = []
    for i in range(1,4):
        def f():
            return i*i
        fs.append(f)
    return fs
f1,f2,f3 = count()
# 9
print(f1())
# 9
print(f2())
# 9
print(f3())

# 避免引用循环变量,g所引用的变量j不是循环变量
def count1():
    fs = []
    for i in range(1,4):
        def ff(j):
            def gg():
                return j*j
            return gg
        fs.append(ff(i))
    return fs
g1,g2,g3 = count1()
# 1
print(g1())
# 4
print(g2())
# 9
print(g3())
(5)lambda匿名函数
aa = lambda x:x*x
print(aa(-3))
bb = lambda x:-x if x < 0 else x
print(bb(-3))
cc = lambda x,y:x*y
print(cc(3,4))
# 省略参数
aa = lambda:123
print(aa()) # 123
* 嵌套lambda
f = lambda x :lambda y:x+y
print(f(1)(2))
# 等效如下
def ff(x):
    def aa(y):
        x+y
    return aa
print(ff(1)(2))
上一篇 下一篇

猜你喜欢

热点阅读