Python:6.函数式编程

返回函数

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# 排序算法

print(sorted([23,2,34,56,1,-20]))

# 接收一个key函数来实现自定义排序.
'''
key指定的函数将作用域list的每一个元素上,并根据key函数返回的结果进行排序。
'''
print(sorted([36,-5,-12,9,-21],key=abs))

# 忽略大小写排序
print(sorted(['Bob','tom','james','Credit'],key=str.lower))

# 反向排序,传入第三个参数reverse=True
print(sorted(['Bob','tom','james','Credit'],key=str.lower,reverse=True))

匿名函数

# 匿名函数
'''
匿名函数lambda x : x * x
1. 关键字lambda表示匿名函数
2. 冒号前面的x表示函数参数
3. 匿名函数只能有一个表达式,不能写return,返回值就是该表达式的结果
'''

装饰器

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# 装饰器
'''
1. 在代码运行期间动态增加功能的方式,称为装饰器(Decorator)
2. 定义wrapper()的前面加上@functools.wraps(func)即可
'''

import functools

# 不带参数
'''
def log(func):
    @functools.wraps(func)
    def wrapper (*args, **kw):
        print('call %s():' % func.__name__) # 函数对象有一个__name__属性,可以拿到函数的名字
        return func(*args, **kw)
    return wrapper

def now():
    print('2018-07-10')

print(now.__name__)
now = log(now)
print(now())
print(now.__name__)
'''

# 带参数
def log(text):
    def decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kw):
            print('%s %s():' % (text, func.__name__))
            return func(*args, **kw)
        return wrapper
    return decorator

def now():
    print('2018-07-10')

now = log('Tom')(now)
print(now())

偏函数

# 偏函数
'''
1. functools.partial的作用就是:把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单
2. 创建偏函数时,实际上可以接收函数对象、*args和**kw这3个参数
'''

import functools

int2 = functools.partial(int, base=2)
print(int2('10000000'))

你可能感兴趣的:(Python:6.函数式编程)