Chinaunix首页 | 论坛 | 博客
  • 博客访问: 41470
  • 博文数量: 7
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 15
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-09 15:12
文章分类
文章存档

2015年(2)

2014年(4)

2012年(1)

我的朋友

分类: Python/Ruby

2014-10-24 00:03:13

1.列表推导

  看几个例子,一切就明白了。

#!/usr/bin/python
numbers = range(10)
size = len(numbers)
evens = []
i = 0
while i < size:
    if i%2 == 0:
        evens.append(i)
    i += 1
print evens

#!/usr/bin/python
evens = [i for i in range(10) if i % 2 == 0]
print evens

#!/usr/bin/python
def _process(pos, element):
    return '%d:%s' % (pos, element)

seq = ['a', 'b', 'c']
print [_process(i, el) for i, el in enumerate(seq)]

  备注:注意 enumerate用法

2.迭代器

  迭代器只不过是实现迭代器协议的容器对象,基于next和__iter__两个方法


#!/usr/bin/python
class TestIterator(object):
    def __init__(self, step):
        self.step = step
    def next(self):
        """Return the next element"""
        if self.step == 0:
            raise StopIteration
        self.step -= 1
        return self.step
    def __iter__(self):
        """Return the iterator itself."""
        return self
print [el for el in TestIterator(4)]


3.生成器

  next()和send()的工作机制一样,不过使用send(),yield将变成能够返回传入的值,因而可以据此来改变行为。

  看两个例子,一切就明白了。

#!/usr/bin/python
def power(values):
    for value in values:
        print "powing %s" % value
        yield value
def add(values):
    for value in values:
        if value % 2 == 0:
            yield value + 3
        else:
            yield value + 2
elements = [1, 4, 7, 9, 12, 19]
res = add(power(elements))
res.next()
#!/usr/bin/python
def psychologist():
    print "Please tell me your problems"
    while True:
        answer = (yield)
        if answer is not None:
            if answer.endswith('?'):
                print("Don't ask yourself too much questions!")
            elif 'good' in answer:
                print("That's good, Let's go on")
            elif 'bad' in answer:
                print("It's a pity")
free = psychologist()

阅读(1904) | 评论(0) | 转发(0) |
0

上一篇:webpy框架

下一篇:Linux下的MySQL udf提权

给主人留下些什么吧!~~