Python全栈开发记录_第五篇(装饰器)

  单独记录装饰器这个知识点是因为这个知识点是非常重要的,必须掌握的。

了解装饰器之前要知道三个知识点

  1. 作用域,上一篇讲到过顺序是L->E->G->B
  2. 高阶函数:
  • 满足下列其中一种即可称之为高阶函数:

    a、把一个函数名当做实参传递给另一个函数

    b、返回值中包含函数名

  3.闭包

 闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境),通俗讲法是:在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。,具体看下面代码:

n = 10  # 定义全局作用域变量


def fn():  # 形成闭包
    n = 100  # 定义局部变量n

    def inner():
        nonlocal n
        n += 1  # 这里定义操作相同变量n无法调用上层作用中的变量,如果只读不写则可以正常访问
                # python3 中新增nonlocal 关键字可以调用上层作用域中的变量
        print(n)

    return inner  # 返回内嵌函数的地址,从而形成闭包
    # 形成闭包的条件
    # 1、必须要有一个内嵌函数
    # 2、内嵌函数中要对自由变量的引用
    # 3、外部函数必须返回内嵌函数


t = fn()       
t()       ->101
print(n) ->10

这里要插播一下,刚刚看到群里面有一道题目,需求如下:

需要将str1 = (('a'),('b')),(('c'),('d'))  变成  [{'a': 'c'}, {'b': 'd'}]

可以先尝试下:

给个提示,用到zip和map,上一篇已经说过map了,这次来补充一下zip是个啥,举个例子给你看下:

#zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
s1 = (('a'),('b'))
s2 = (('c'),('d'))
s3 = zip(s1, s2)
print(list(s3))   ->结果是:[('a', 'c'), ('b', 'd')]

所以应该知道怎么玩了吧,接下来就是答案了:

str1 = (('a'),('b')),(('c'),('d'))
z = zip(str1[0], str1[1])  #返回的是一个迭代器
b = list(map(lambda x: {x[0]: x[1]} , z))  #map这里做的就是将zip类的两个元祖拿出来然后进行元祖变成字典的转换(这个转换不错值得学习),返回的也是一个迭代器,所以用list返回成列表
print(b)

猜你喜欢

转载自www.cnblogs.com/leixiaobai/p/9888306.html