函数2

一 函数名的应用

#函数名为变量

1.可赋值
    def func():
        pass
    func = 1

2.可作为列表元素
    def func1():
        pass
    def func2():
        pass
    def func3():
        pass

    l = [func1,func2,func3]
    for i in l:
        print(i())

3. 可以作为函数参数
    def func():
        pass
    def walsn(fn):
        fn()
    print(walsn(func))

4.可以作为return值
    def func():
        print('a')
        def inner():
            print('b')
        return inner
    func()() #占内存,速度慢
    或者:
    ret = func()
    print(ret())

二 函数闭包

定义:再内层函数中访问外层函数的局部变量

作用:
    1.安全,保护变量不受外界影响
    2.让变量常驻内存

例子:
    def func():
        a = 10
        def inner():
            print(a)
        return inner

三 迭代器

1.定义:可迭代对象,通过__iter__获取生成器,再通过__next__获取元素

2.特点:
      a.只能往下                #iterable 可迭代的
      b.惰性机制                #itertor  迭代器
      c.几乎不占内存

    s = ['aaa','vvvv','bbbb','sss']
    print(__inter__ in dir(s)) #判定是否可迭代, dir()为查看括号内的功能,如dir(str)为查看字符串的功能

    it = s.__iter__()    #获取生成器
    ret = it.__next__()  #获取元素
    print(ret)

2.迭代器替换for循环

    for循环:
           s = ['aaa','vvvv','bbbb','sss']
           for i in s:
               print(i)

    迭代器:
            s = ['aaa','vvvv','bbbb','sss']
            it = s.__iter__()
            while 1:
                try:
                    print(it.__next__())
                except:
                    StopIteration
                    break

四 生成器

1.定义与写法:
          #函数中如果有yield存在,这个函数为生成器函数,调用函数时,不会执行函数,只是获取生成器
            def func():
                yield 1             #yield 与 return 是一样的,返回一个值,但是yield不会终止函数,而是将函数分段
            g = func()              #获取生成器函数

            ret = g.__next__()      #执行函数,直到下一个yield
            ret2 = g.__next__()     #继续执行函数,到下一个yield

2.特点:
      a. 只能往下
      b. 惰性机制
      c. 节省内存

3.用法:
    买衣服(一次性全买了)
    def func():
        list = []
        for i in range(10000):
            ret = list.append('衣服'+i)
        return ret
    print(func())

    买衣服(一件一件的买)
    def func():
        for i in range(10000):
            ret = "衣服"+i
        yield ret
    g = func()  #获取生成器
    a = g.__next__()

4.send()与__next__()是一样的,可以获取元素,但是send()还可给上一个yield赋值,send()中必须要有参数,第一个只能为__next__()
    def func():
        print('小米第一段')
        a = yield 123
        print('小名第二段')
        a = yield 456
        print('小张第三段')
        a = yield 789
        print('小和第四段')
        a = yield 000
    g = func()
    ret = g.__next__()
    ret1 = g.send('哈哈哈')     此时,a为'哈哈哈'

5.for迭代
    def func():
        yield 1
        yield 2
        yield 3
        yield 4
        yield 5
    for i in func():
        print(i)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值