python核心编程-第十一章-我的笔记(二)

     7.3  做用域和 lambda
python

        lambda 语句中的表达式有和函数相同的做用域dom

>>> x = 10
>>> def foo():
...     y = 5
...     bar = lambda: x+y
...     print bar()
...     y = 8
...     print bar()   
>>> foo()
15
18

    7.4  变量做用域和名称空间函数

    根据这个例子和输出来理解变量做用域:code

#!/usr/bin/env python
j, k = 1, 2

def proc1():
    
    j, k = 3, 4
    print "j == %d and k == %d" % (j, k)
    k = 5
    
def proc2():
    
    j = 6
    proc1()
    print "j == %d and k == %d" % (j, k)
    
    
k = 7
proc1()
print "j == %d and k == %d" % (j, k)

j = 8
proc2()
print "j == %d and k == %d" % (j, k)

    输出:递归

    

    7.5  递归ci

    若是函数包含了对自身的调用,则该函数就是递归的,如:作用域

def factorial(n):
    if n == 0 or n == 1:
        return 1
    else:
        return n * factorial(n-1)

   7.6  生成器
it

    生成器就是一个带有 yield 语句的函数。一般来讲,一个函数或者子程序只返回一个值,但 yield 语句能暂停执行并返回一个中间结果给调用者。当生成器的 next() 方法被调用时,从暂停的地方继续io

   7.6.1  简单的生成器特性ast

    A.   一个简单的例子:    

>>> def simpleGen():
...     yield 1
...     yield '2 --> punch!'
...
>>> myG = simpleGen()
>>> myG.next()
1
>>> myG.next()
2 --> punch!
>>> myG.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

    Python 的 for 循环穿过生成器更加简单漂亮   

>>> for eachItem in myG:
...     print eachItem
...
1
2 --> punch!

     B.  稍微复杂些的例子,建立一个带序列并从序列中随机返回一个元素的随机迭代器

>>> from random import randint
>>> def randGen(aList):
...     while len(aList) > 0:
...         yield aList.pop(randint(0, len(aList)))
...
>>> for item in randGen(['rock', 'paper', 'scissors']):
...     print item 
...
paper
rock 
scissors
相关文章
相关标签/搜索