您的位置:首页 > 其它

lambda函数、generator函数、yield与return语句的区别

2014-08-20 19:05 162 查看
lambda函数

lambda函数用于创建一个匿名函数,函数名未和标识符绑定,使用lambda函数可以返回一些简单的运算结果。

# -*- coding: UTF-8 -*-
#lambda也称为表达式,lambda中只能使用表达式,不能使用判断、循环等多重语句
def func():                   #实现表达式(x+y)*(m-n)
x = 1
y = 2
m = 3
n = 4
sum = lambda x, y : x + y   #lambda地址赋值给一个变量使用  lambda与变量sum绑定在一起了
print sum                    #sum保存的是lambda函数的地址,输出结果<function <lambda> at 0x01992370>
sub = lambda m, n : m - n    #:左边m,n为参数,:右边的m-n为表达式即函数体
print sub                     #输出结果<function <lambda> at 0x01992330>
return sum(x, y) * sub(m, n)    #有函数地址,就相当于函数了,可以调用函数

print func()    #运行结果为-3

# 前面lambda赋值给一个变量使用,也可以直接把lambda当函数使用
print (lambda x: -x)(-2)  #函数参数为-2,返回结果2


生成器generator

生成器的作用是一次产生一个数据项,并把数据项输出。generator函数可以用在for循环中遍历。generator函数每次返回一个数据项的功能使得迭代器性能更佳:

generator函数在函数体内一定有yield生成数据项。

# -*- coding: UTF-8 -*-

# 定义generator函数
def func(n):
for i in range(n):
yield i
# 在for循环中输出
for i in func(3):
print i
# generator函数使用next()输出结果
r =  func(3)
print r.next()
print r.next()
print r.next()
#print r.next()  已经到头了访问越界时在输出会报错StopIteration


yield与return语句的区别

# yield与return区别
#1.yield保留字与return语句的返回值和执行原理不相同。
# 2.yield生成值并不会终止程序运行,like  continue,而return返回值后程序将终止执行like break
def func(n):
for i in range(n):
return i    #碰到return语句,函数就结束
def func2(n):
for i in range(n):
yield i

print func(3)   #输出结果0
f = func2(3)
print f    #<generator object func2 at 0x013442D8>返回func2()的地址
print f.next()  #输出0
print f.next()  #输出1
print f.next()  #输出2


程序需要高性能,一次只需一个值进行处理时,使用generator函数。当需要获取一次性一组元素的值时,使用序列。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: