Fluent Python读书笔记(3)

 一等函数

  1. 三个特点,能赋值给变量或者数据结构中的元素;作为参数传给函数;作为函数的返回结果。再加一点的话注意的是一等函数是运行时创建。
  2. key传参也可以是函数。
  3. callable可以判断是否是可调用的对象。
  4. 位置参数关键字参数见此文。有个小例子需要注意:
    def tag(a,*b,c=None,**d ):
        if c is not None:
            print('c')
        if d :
            print('d')
        if b:
            print('b')
        if a:
            print('a')
        
    tag(1)
    tag(1,2)
    tag(e=5,a=1)
    tag(b=2,a=1)
    
    Print:
    a
    b a
    d a
    d a

    最后一个输出注意下即可。

  5. 函数注解,举个例子即可:
    def abc(a:str,b:'int > 0'=80) -> str:

    分别代表位置参数,关键字参数,和返回值的注解。

设计模式

虽然设计模式与语言无关,但是并不是意味着每个设计模式都能在每一门语言中应用,在著名的《设计模式:可复用面向对象的软件基础》中的23个设计模式,有16个在动态语言中消失不见。

本章 不详述,在python设计模式中有详细论述。

装饰器与闭包

  1. 装饰器在此文中也有较为初步的论述,这里我们也是贴一个小例子:
    def deco(func):
        print(1)
        def inner():
            print(2)
        return inner
    
    @deco
    def target():
        print(3)
    
    if __name__ == '__main__':
        print(4)
        target()
    
    Print:
    1
    4
    2

    注意输出顺序,在print(4)前注意的是,@deco已经执行了"print(1)"

  2. 简单概括一下装饰器,尽管表述可能不是很准确:“即使调用为A名字的函数,但被运行的函数‘另有其人’”。

  3. 上面两条其实概括了装饰器的特性,首先要确定的是它只是一个语法糖,能把装饰的函数替换成其他函数,同时装饰器在加载模块时可以立即执行。

  4. 变量的种类不能改变函数的定义体,即便局部变量是在后文定义,但是也不会因为这样就判断本地环境中的值为全局值。

  5. 闭包是指延伸了作用域的函数,其中包含函数定义体中引用,但是不再定义体中定义的局部变量。

  6. Nonlocal:

    def shuc():
        a = 1
        def csd():
            a += 1
            return a
        return csd
    
    b = shuc()
    print(b())
    
    local variable 'a' referenced before assignment
      File "C:\Users\starinsun\Desktop\practice\fluent_python\3.py", line 4, in csd
        a += 1
      File "C:\Users\starinsun\Desktop\practice\fluent_python\3.py", line 9, in <module>
        print(b())

    而使用nonlocal即可把因+=出现的局部变量转化为自由变量。

    def shuc():
        a = 1
        def csd():
            nonlocal a
            a += 1
            return a
        return csd
    
    b = shuc()
    print(b())
    
    Print
    2

    .

  7. "functools.lru_cache()"对于处理递归这类耗时的问题,通过其缓存特性,可以使其运行更快。只需要叠加装饰器即可。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值