虫虫Python小推车动态语言Ruby Python

Python学习打call第二十天:高阶函数

2019-02-18  本文已影响34人  暖A暖

今天主要学习了Python中sorted,filter, map 三个高阶函数,还了解了一下函数的柯里化;

1.什么是高阶函数

def way1(x):
    return x + 3

def way2(x):
    return x * x
result = way2(way1(7))
print(result)  # 100

2.标准库中的高阶函数

sorted函数:

# 反向排序
str = sorted('abcdefg', reverse=True)
print(str)  # ['g', 'f', 'e', 'd', 'c', 'b', 'a']

# 按指定元素进行排序
obj = [[1,2], [5,6], [2,8], [8,3], [3,10]]
func = lambda x: x[1]
new_list = sorted(obj, key=func, reverse=False)
print(new_list)  # [[1, 2], [8, 3], [5, 6], [2, 8], [3, 10]]

filter函数:

# 过滤
obj = filter(lambda x: x > 0, [-20, -10, -1, 0, 1, 10, 20])
print(obj) # <filter object at 0x004C9EB0>

for i in obj:
    print(i) # 1 10 20

map函数:

# 函数映射
obj = map(lambda x: x+1, [0,6,10])
print(obj) # <map object at 0x0026DDB0>
for i in obj:
    print(i) # 1 7 11

#封包传递
obj2 = map(lambda x, y: x+y, *([0, 5, 8], [2, 2, 2]))
print(obj2)  # <map object at 0x0076FE90>
for i in obj2:
    print(i)  # 2 7 10

3.自实现高阶函数

# sorted高阶函数自实现
def my_sorted(iterable, key=lambda a,b: a<b, reverse=False):
    ret = []
    for x in iterable:
        for i, y in enumerate(ret):
            isReverse = reverse
            if key(x,y) if not isReverse else key(y,x):
                ret.insert(i, x)
                break
        else:
            ret.append(x)
    return ret
print(my_sorted([3,21,3,4,5], reverse=False))

4.函数的柯里化

将f(x, y)  转换为  f(x)(y)
f(x, y) = f(x)(y)
# 普通函数
def add(x, y):
    return x + y
print(add(3,7)) # 10

# 柯里化
def new_add(x):
    def _add(y):
        return x + y
    return _add
print(new_add(3)(7)) # 10

参考:侠课岛(9xkd.com)Python同学计划

上一篇 下一篇

猜你喜欢

热点阅读