python的一些高级特性

python高级的一些特性

  1. is和==
  2. 深浅拷贝
  3. 生成器
  4. 迭代器
  5. 装饰器
  6. 正则表达式
  7. 动态语言的特征

is和==

==比较运算符。是用来比较两个值的大小的。

is是一个关键字。是用来比较两个变量的内存地址。相当于使用id获取内存地址后再比较。

注意:在python中,存在一个小整型缓冲区。在这个区域内的整数,只会存在一份,所以is==是一致的。小整型缓冲区默认范围是[-5, 256]区间所有整数。

注意:字符串也存在一个字符串常量池,用来保存第一个出现的单词,如果再次要使用这个单词,则会直接从常量池中获取这个单词对应的内存地址,所以,字符串往往只有一份,被成为字符常量。

深浅拷贝

  • 引用传递

引用传递:将对象的地址复制给其他变量,因此会有多个引用指向同一个对象。

  • 浅拷贝

将对象的第一层属性进行拷贝,得到一个新的对象,注意:如果存在子对象,不会拷贝

  • 深拷贝

将对象采用递归方式,逐层拷贝,最后得到完成不同的对象。

拷贝:指的是对象拷贝(复制)。

生成器(generator)

列表推导式

python提供了一种快速生成列表的方式。

列表生成器

列表生成器实在列表推导式的基础上,优化内存得到的。

将列表推导式,就行优化,使得所有不在全部加载内存,而是通过一段算法,一次只得到一个元素。

将列表推导式中的[]变成()即可。

优点:节约内存。

函数生成器

常规的方式,如果要生成一个复杂的列表,通过要使用函数。

而如果这个列表比较大,使用函数也存在一个浪费内存问题,如何解决这个——函数生成器。

函数生成器:和列表生成器很像,就是该函数不会再一次生成所有的值,而是逐个生成。

yield关键字

通过上面的代码,可以看出,函数的返回值变成了一个生成对象。

注意:

  1. 如果函数中出现了yield关键字,该函数会自动转换为一个函数生成器。
  2. 返回值就是这个生成器,调用函数,函数不会执行,而是转换为这个生成器
  3. next方法获取每一次生成器值的时候,函数才会执行
  4. yield也存在类似return的功能,函数遇到yield,立刻返回yield的值
  5. 等下一次next时,会自动从yield后面一行代码继续执行

内容回顾

  • is和==的区别
  • 小整型缓冲区
  • 字符串常量池
  • 深浅拷贝
    • 引用传递
    • 浅拷贝
    • 深拷贝
  • 生成器(generator)
    • 列表推导式
    • 函数生成列表
    • 生成器
    • yield关键字

迭代器(Iterator)

可迭代对象(Iterable)

list、tuple、set等等对象都是可迭代对象。

可迭代对象:在python,能被for循环,迭代获取每一个子元素的这种对象,被称为可迭代对象。list、tuple、set、dict、str

可以使用collections.abc包中的Iterator类型进行判断,结合isinstance全局函数,完成判断

迭代器

在python中,能够被全局函数next(),不断地返回下一个元素的对象,被称为迭代器。

所以,生成器就是一个种迭代器。

总结:

  1. 生成器就是迭代器
  2. 迭代器不一定是生成器
  3. 迭代器一定能够被for循环迭代
  4. 可迭代对象也能够被for循环迭代
  5. 可迭代对象不一定是迭代器
  6. 迭代器一定是可迭代对象
  7. 使用全局函数iter将可迭代对象转换为迭代器

闭包(closure)

闭包:能够访问其他函数内部变量(局部变量)的函数被称为闭包。

闭包是弱数据类型编程语言所特有的现象。

结论:闭包让外部函数常驻内存,导致垃圾不能及时释放,但它让局部变量变成了全局变量,所以尽量不要使用闭包,闭包在js里用的比较广泛,在python里较少,会在装饰器里用

闭包  优点:将局部变量全局化,使得局部变量存在了全局的生命周期。

      缺点:常驻内存,可能会引起内存溢出。

装饰器

OCP原则:O(open)C(close),开放关闭原则。

装饰器:python为开发者提供装饰设计模式的体现。在不动用原有代码的基础上,实现新功能的增强。

  1. 使用闭包实现装饰代码
  2. 使用@装饰器函数注解到需要被装饰的函数上

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值