Python生成器和闭包

Python生成器和闭包

from math import sqrt
"""
## 生成器(generator)
一个带有`yield`的函数就是一个生成器(generator),
生成器看起来象函数调用,但不会执行任何函数代码,
知道对其调用`next()`才开始执行。
虽然执行流程仍按照函数的流程执行,
但每执行到一个yield语句就会中断,
并返回一个值。
 """

def gen():
    for x in range(1,11):
        print('generating')
        yield x

for x in gen():
    print(x)

#闭包(函数嵌套)
#outer外层函数
#inter内层函数

def outer(x):
    def inter(y):
        return x+2*y
    return inter

print(outer(3))
print(outer(3)(4))


#使用类来计算两点距离
class Point(object):
    def __init__(self,x,y):
        self.x=x
        self.y=y

    def distance(self,u,v):
        return sqrt((self.x-u)**2+(self.y-v)**2)

point=Point(3,4)

print(point.distance(9,9))


#使用闭包实现距离

def point_loc(x, y):
    def dist(u, v):
        return sqrt((x - u) ** 2 + (y - v) ** 2)

    return dist
print(point_loc(3,4))
print(point_loc(3,4)(9,9))

# 注意:f()里面的内容不会立即执行,所以避免在闭包中引用后续会发生变化的变量

运行结果:

generating
1
generating
2
generating
3
generating
4
generating
5
generating
6
generating
7
generating
8
generating
9
generating
10
<function outer.<locals>.inter at 0x0000024BE46AF510>
11
7.810249675906654
<function point_loc.<locals>.dist at 0x0000024BE46AF8C8>
7.810249675906654

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值