Python学习随笔七:高级特性

写在前面

Python作为一门高级语言,代码不是越多越复杂越好,而是越少越简单越好。
基于这一思想,本节来介绍Python中非常有用的高级特性,1行代码能实现的功能,决不写5行代码。毕竟,代码越少,开发效率越高

  • 列表生成器
  • 生成器
  • 迭代器

列表生成器

列表生成器在前一节已经出现过,形如

list(range(1,11))
[x for x in range(1, 11)]
[x*x for x in range(1, 11)]#平方
[m + n for m in 'ABC' for n in 'XYZ']#两层循环
[x * x for x in range(1, 11) if x % 2 == 0]#循环加判断

生成器

基本概念

列表生成式能够直接创建一个列表。但如果仅仅需要访问前面几个元素,使用列表生成式会白白浪费后面绝大多数元素占用的空间。
而在Python中,存在一种一边循环一边计算的机制,称为生成器:generator。即如果列表元素可以按照某种算法推算出来,就可在循环的过程中不断推算出后续的元素。
这样做的好处不必创建完整的list,从而节省大量的空间。

创建生成器

1、将列表生成式的[]改成(),next()函数获得generator的下一个返回值:

>>> g = (x * x for x in range(11))
>>> g
<generator object <genexpr> at 0x0000000004113F30>

也可以用for循环

for n in g:
    print(n)

2.包含yield语句的函数

def fib(max):
    n, a, b = 0, 0, 1#一次性多重赋值
    while n < max:
        print b
        a, b = b, a + b
        n = n + 1

将print b改为yield b就可以把fib函数变成generator,任何包含yield语句的函数称为生成器。含有yield语句的生成器调用方法与上述一样

*生成器与普通函数的区别
函数顺序执行,遇到return退出
生成器运行到yield点等待被重新唤醒,重新唤醒后就从停止的那点开始执行

o = fib(5)
next(o)
for n in fib(8):
    print(n)

迭代器

迭代的意思是重复做一些事很多次
实现了iter方法的对象都可以进行迭代

class Fib(object):
    def __init__(self):
        self.a, self.b = 0, 1 

    def __iter__(self):
        return self

    def __next__(self):
        self.a, self.b = self.b, self.a + self.b 
        if self.a > 100000: # 退出循环的条件
            raise StopIteration();
        return self.a 

——————————————
Python2.x的迭代器对象应该实现next方法

内建函数iter可以从可迭代的对象中获得迭代器

it = iter({1:2,3:3})
>>> next(it)
1
>>> next(it)
3

——————————————
Python2.x为it.next()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值