python基础-装饰器和偏函数

Posted sparkingplug

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python基础-装饰器和偏函数相关的知识,希望对你有一定的参考价值。

一、装饰器

1、概念:装饰器是一个闭包(内层函数引用外层函数的非全局变量,这个内层函数就可称之为闭包),把一个函数当做参数返回一个替代版的函数,本质上就是一个返回函数的函数。

2、作用:在不修改源代码的基础上,扩展代码的使用。

3、理解装饰器

#不带参数的源函数
def fun1():
        print("I love python")


fun1()     


#若我想在原来的基础上,先输出一行的*号,我们可以重新写一个函数

def fun2():
        print("***********")
        print("I love python")

fun2()    #但是这改变了源函数
#这时我们用到了装饰器的思想
def outer(func):
    def inner():
        print("***********")
        fun1()
    return inner

fun1 = outer(fun1)
fun1()

接下来,写一个带参数的,比较通用的装饰器,并运用装饰器语法糖(@)来表示。

def outer(func):
    def inner(age):
        if age<0:
            print("输入错误")
            age=0                         #添加对源函数修改的内容
        func(age)
    return inner
@outer       #@将装饰器应用到函数

def introduce_age(age):
    print("I‘m %d years old" % (age))      #源函数

introduce_age(-10)          #执行语句

二、偏函数

       python中的偏函数和数学中的偏函数是不同的,这是两个东西,其实python中的偏函数的作用和原函数的作用类似,只是原函数中有些参数,在每次调用时都需要进行修改,难免有些麻烦,如int函数,它默认是十进制(base = 10),我们要用到二进制就需要每次更改base =2。所以我们可以自己定义一个函数:

def int2(str,base=2):
    return int(str,base)

print(int2("1010"))

#运行结果
10

python中的functools包中的partial可以直接实现这样的功能,就不需要我们自己去设置了,它的作用就是把函数中的一个参数固定住,形成一个新的函数。

import functools
int2 = functools.partial(int,base = 2)

print(int2("1011"))

#运行结果
11

 

以上是关于python基础-装饰器和偏函数的主要内容,如果未能解决你的问题,请参考以下文章

Python高阶函数之装饰器和偏函数

python函数下篇装饰器和闭包,外加作用域

Python初探第二篇-装饰器和迭代器,生成器

Python 函数装饰器和闭包

Python学习—— 装饰器和函数闭包

python基础之装饰器