zoukankan      html  css  js  c++  java
  • python装饰器系列(一)

    高阶函数

    一个函数能接受另一个函数作为参数传入,这样的一个函数就是高阶函数

    在python中一切皆对象,函数也不例外,函数是可以赋予给一个变量的

    在python中,变量可以指向一个函数,函数的参数可以接收一个变量,那么函数的参数也就可以是一个函数

    1 def num(x,y):
    2     return y(x)
    3 
    4 def f(a):
    5     return a ** 2
    6 
    7 num(4,f)
    8 16

    上边直接调用num()函数,把指向函数f(a)的函数名f,即f实质也是一个变量,作为一个变量传递给了num(x,y)函数中的参数y,这样也得到了正确的答案。所以函数中的参数可以接收一个函数。

    总结:高阶函数的实质就是函数的参数能够接收另一个函数

    装饰器

    1 def deco(fn):
    2     print('ha ha ha')
    3     return fn
    1 def myfun():
    2     print('call myfun()')
    #调用deco(fn)函数,把myfun函数作为参数传入,deco(fn)函数会先执行print语句,再返回fn函数,即这里的myfun函数。再让变量f4指向myfun()这个函数对象
    1.f4 = deco(myfun) 2. ha ha ha
    1 f4()   
    2 #f4是指向myfun()函数对象的一个变量,因为变量可以指向一个函数,所以执行f4()就可以调用myfun()这个函数
    3 call myfun

    采用python的魔法也可以实现上边的相同效果

    1 @deco
    2 def myfun():
    3     print('call myfun')
    4 ha ha ha
    1 myfun()
    2 call myfun

    @deco中的@是语法糖,表示下边定义的函数将会被@后的那个函数所修饰,即myfun()函数会被deco(fn)这个函数所修饰,实质就是执行了myfun = deco(myfun),所以打印出了ha ha ha,并把原来的myfun()函数返回回来,下边执行myfun()时就调用了原来的myfun()函数,输出了call myfun

    1 myfun()
    2 call myfun



  • 相关阅读:
    CouchDB
    在 Fabric 中使用私有数据
    Hyperledger Fabric 踩坑汇总
    书单
    HyperLedger Fabric 资料网址大全
    Hyperledger composer
    Hyperledger Fabric
    [转]以太坊智能合约编程之菜鸟教程
    [转]Ethereum-智能合约最佳实践
    [转]工作量证明(PoW)权益证明(PoS)和委任权益证明(DPoS)区别
  • 原文地址:https://www.cnblogs.com/tianshug/p/10921701.html
Copyright © 2011-2022 走看看