Python全栈开发记录_第五篇(装饰器)
Posted ~泪小白~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python全栈开发记录_第五篇(装饰器)相关的知识,希望对你有一定的参考价值。
单独记录装饰器这个知识点是因为这个知识点是非常重要的,必须掌握的。
了解装饰器之前要知道三个知识点
- 作用域,上一篇讲到过顺序是L->E->G->B
- 高阶函数:
-
满足下列其中一种即可称之为高阶函数:
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)
以上是关于Python全栈开发记录_第五篇(装饰器)的主要内容,如果未能解决你的问题,请参考以下文章
python全栈开发第五篇Python可变数据类型和不可变数据类型