4.8 Python3 进阶 - 偏函数

>>返回主目录


源码

from functools import partial

# 有默认值关键字参数的函数
# 例如:改变int函数的默认关键字参数值
print('原int函数,默认base=10:', int('101'))
# 通过partial函数实现,创建一个新的int_2函数
int_2 = partial(int, base=2)
print('新int_2函数,默认base=2:', int_2('101'))

源码

from functools import partial


# 没有默认值关键字参数的函数
# 例如:求两组数据的和,其中一组数据固定不变
# 自定义一个求和函数
def _sum(*args):
    print('当前args的值是:', args)
    total = 0
    for i in args:
        total += i
    return total


list_a = [2, 8, 5, 9, 11]
list_b = [10, 20]
tuple_c = (3, 7, 6)
sum_result = _sum(*list_a) + _sum(*list_b)
print('方法一:分而治之:', sum_result)
print('方法二:合而治之:', _sum(*(list_a + list_b)))
# 通过partial函数创建一个新的sum_add_10_20函数
sum_add_10_20 = partial(_sum, *list_b)
print('方法三:通过偏函数默认list_b参数,对list_a和list_b求和:', sum_add_10_20(*list_a))
print('方法三:通过偏函数默认list_b参数,对tuple_c和list_b求和:', sum_add_10_20(*tuple_c))

源码

# 使用装饰器实现上述partial函数功能
def sum_add(*args1):
    def decorator(func):
        @wraps(func)
        def wrapper_sum(*args2):
            total = 0
            for i in args2:
                total += i
            return func(*args1) + total

        return wrapper_sum

    return decorator


# 自定义一个求和函数
@sum_add(*list_b)
def _sum(*args):
    total = 0
    for i in args:
        total += i
    return total


print('调用被装饰过的自定义函数:', _sum(*list_a))

>>返回主目录

posted @ 2021-08-12 20:26  PortosHan  阅读(35)  评论(0编辑  收藏  举报