Python学习笔记

嵌套函数作用域

def make_adder(augend):
  def add(addend):
    return augend + addend
  return add

内部的函数可以访问外部函数scope内的变量,但是不能够重新对其赋值。如果重新赋值那么会在内部函数的scope内创建一个同名的本地变量(Python不允许对non-local变量赋值)。

yield和生成器(generator)

generator是通过执行generator function来创建的。generator function是函数体中有yield语句的函数。generator的用途是用来生成一系列的值,generator.next()可以获取到下一个值,注意,由此可以看出generator是可以迭代的(iterable),所以可以使用for...in语句来遍历generator能够生成的所有值。

with语句和context manager

介绍with语句之前首先要介绍context manager。context manager是有两个特殊方法(__enter__()和__exit__())的类。以下面的with语句为例:

with open('data.txt') as f:
    lines = f.readlines()

 上面的代码其实就等同于:

f = open('data.txt')
try:
    lines = f.readlines()
finally:
    f.close()

 open()函数打开一个文件,返回一个file对象,file类就是一个context manager。在进入到 lines = f.readlines() 之前 ,会先执行file.__enter__()方法,该方法返回self,也就是file对象本身。然后在退出with语句块(lines = f.readlines())之前执行file.__exit__(type,value,traceback)方法。with语句的好处是通过context manager封装了try...finally语句,起到代码重用的目的。

 

 

posted @ 2013-10-31 01:16  StrikeW  阅读(137)  评论(0编辑  收藏