python知识捡拾---闭包

闭包:将函数作为返回值返回

实例1def say(word):
    def name(name):
        print(word,name)
    return name
hi = say('你好')
hi('小明')    #你好 小明
bye=say('再见')
hi('小明')    #再见 小明
实例2def func():
    res = []
    def put(x):
        res.append(x)
    def get():
        return res
    return put,get
p,g = func()
p(1)
p(2)
print("当前res值:",g())   #当前res值: [1, 2]
p(3)
p(4)
print("当前res值:",g())   #当前res值: [1, 2, 3, 4]
yield关键字可以将函数执行的中间结果返回但是不结束程序。
实例:
def func(n):
    i=0
    while i<n:
        yield i
        i +=1
for i in func(10):
    print(i)

yield关键字的作用就是把一个函数变成了一个generator(生成器)

关于实现斐波那契的几种比较:
第一种:
def fab(max):
    n,a,b=0,0,1
    while n<max:
        print(b)
        a,b=b,a+b
        n=n+1
fab(5)    

注意:以上直接在函数中打印数字会导致该函数可复用性变差

第二种:
def fab(max):
    n,a,b=0,0,1
    L=[]
    while n<max:
        L.append(b)
        a,b=b,a+b
        n=n+1
    return L
for i in fab(5):
    print(i)

第二种函数在运行中占用的内存会随着参数max的增大而增大

第三种:
def fab(max):
    n,a,b=0,0,1
    while n<max:
        yield(b)
        a,b=b,a+b
        n=n+1
for i in fab(5):
    print(i)

第三种比较合理!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值