Python学习【4】

装饰器:* decorator(语法糖)*

定义:装饰器本质是函数,(装饰其他函数),就是为其他函数添加附加功能,装饰器对原函数没有任何影响。

原则:

  1. 1、不能修改被装饰的函数的源代码
  2. 2、不能修改被装饰的函数的调用方式

实现装饰器的知识储备:

  1. 1、函数即"变量"
  2. 2、高阶函数
  3. 3、嵌套函数

高阶函数+嵌套函数–》装饰器

装饰器之函数即变量

函数就是变量,

def test():

Pass

Test = "函数体"

Test()

和变量一样,没有门牌号【变量名,函数名】,内存立刻回收

Del没有删除内存地址的1,只是把门牌号删除了,系统会定期刷新内存,发现没有引用【门牌号】的内存,会自动清除内存。函数名就是门牌号,就是内存地址。

个人理解:当定义一个函数的时候,函数名作为门牌号,也就是函数的地址存放起来,然后将函数体(一堆字符串)放到内存中(仅仅是存放,不执行,不检查),只有当函数执行的时候,函数体才会执行,检查。函数名==》地址,函数名()==>函数执行

装饰器之高阶函数:

a:把一个函数名当做实参传给另外一个函数【函数名(内存地址)可以来回赋值】(在不修改被装饰函数源代码的情况下为其添加功能)

b:返回值中包含函数名(不修改函数的调用方式)

装饰器之嵌套函数:

嵌套函数就是函数体内部定义函数,而不是调用函数,得有def

装饰器之参数完整版:

装饰器之牛逼版:

迭代器与生成器

列表生成式(代码简洁)

生成器(* generator *)

优点:节省空间,列表元素可以通过某种算法推算出来,一遍循环,一遍计算后面的元素。

第一种表示方式:使用圆括号

生成器也是一种可迭代对象。

生成器是当你使用的时候才生成,不调用不生成,省空间。

列表是提前全部准备好,浪费空间。

生成器:只有在调用的时候才会生成相应的数据。只记住当前位置(前面的都没了,所以省内存),不能往回返,只能一步一步的往后走,

只有一个方法a.__next__() == next(a),往后走一步。2.4中为next()

但是一步一步的取很麻烦,一般用for 循环:

第二种表示方式 :当推算的算法比较复杂的时候,列表生成器的形式无法表示,这个时候要通过函数来表示。

斐波那契数列,,1,1,2,3,5,8.。。。

a,b = b,a+b ==>t = (b,a+b)tuple,a = t[0],b = t[1]

Next()是python内置方法,f.__next__()是generator的方法,二者在此处的功能是一样的。

如果一个函数定义中包含yield关键字那么这个函数就成了generator

Return:在函数中,函数值顺序执行的,遇到return语句或者最后一行语句就返回。

Yield:成为了generator,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从返回的yield语句处继续执行。(yield语句处会跳出函数,执行其他语句,再次执行next()会返回函数yield()处,相当于函数的进出口)

使用fo循环调用generator,拿不到generator的return语句返回值。迭代完成之后,会返回一个StopIteration错误,捕获错误,返回值包含在StopIteration的value中:

另外generator.send()方法可以给yield发送值

迭代器:iter()

一类是集合数据类型:list\tuple\dict\set

一类是generator

可迭代对象:直接用于for循环的对象Iterable

迭代器:可以被next()函数调用并且不断返回下一个值的对象称为迭代器Iterator

匿名函数

Def haha(n):

Print(n)

Haha(5)

等价于下面

Calc = Lambda n:print(n)

calc(5)

三元运算 lambda n:3 if n<4 else n

Filter过滤

Map 等价于列表生成式==》i*i for i in range(5)

Reduce

Zip(拉链的意思)

Json
只能处理简单的(字符串,列表,字典之类的),用于各个不同语言之间的交互,类似于xml

Pickle可以序列化所有的python数据类型(只能python中用)

Json模块提供四个功能:dumps\dump\loads\load

Pickle模块提供四个功能:dumps\dump\loads\load

Json序列化

Json反序列化

Pickle的序列化

Pickle反序列化

多级目录

Print(__file__)返回当前脚本的相对路径()

Import os

Os.path.abspath(__file__) 绝对路径

Os.path.dirname( Os.path.abspath(__file__) ) 返回当前绝对路径,不包括文件名

BASE_DIR = os.path.dirname( os.path.dirname( os.path.abspath(__file__) ) )#返回父目录

sys.path.append(BASE_DIR) #添加到环境变量中

内置参数详解 https://docs.python.org/3/library/functions.html?highlight=built#ascii

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值