zoukankan      html  css  js  c++  java
  • 总结day11 ----函数的学习(2)

    内容大纲

      一:  函数的运行

      二:  闭包

      三:  迭代器

      四:  生成器

      五:  列表生成器

      六:  列表推导式

      七:  生成器表达式 

      八:  匿名函数

    一:  函数的运行

      1:函数名是一个特殊变量

      

     def func():
    #     print(666)
    # print(func)

      2:函数名可以当做变量进行赋值

    # f1 = 2
    # f2 = f1
    # f3 = f2
    # print(f3)
    
    # def func():
    #     print(666)
    # func1 = func
    # f2 = func1
    # f3 = f2
    # # print(f3)
    # f3()

      3:函数名可以当做容器类的元素

    # def func1():
    #     print('in func1')
    #
    #
    # def func2():
    #     print('in func2')
    #
    #
    # def func3():
    #     print('in func3')
    #
    # l1 = [func1, func2, func3]
    # for i in l1:
    #     i()

      4:函数名可以当做函数的参数

    # def func(x):
    #     # print(x)
    #     x()
    #     print('in func')
    #
    # def func1():
    #     print('in func1')
    #
    # func(func1)

      5:函数名可以当做返回值

    def func(x):  # x ---> func1
        return x  # func1
    
    def func1():
        print('in func1')
    
    # ret = func(func1)  # func1
    # ret()
    func(func1)()

    二:闭包

      >1    

        1:内层函数对外层函数(非全局)变量的引用

        2:闭包只存在内部函数中

        3:函数都要逐层返回,最终返回给最外层

      >2

    # def func(n):
    #     n = name
    #     def inner():
    #         print(n)
    #     return inner
    # name = '太白'
    # f = func(name)
    # print(f.__closure__[0].cell_contents)

     

      >3

    # def func(step):
    #     num = 1
    #     num += step
    #     print(num)
    # j = 0
    # while j < 5:
    #     func(3)
    #     j += 1
    
    # 闭包:解释器执行程序时,如果遇到函数,随着函数的结束而关闭临时名称空间,但是!!!
    # 如果遇到闭包,有一个机制:那么闭包的空间不会随着函数的结束而关闭。

    三:迭代器

      >1 可迭代带对象

        # 内部含有__iter__方法的就是可迭代对象,遵循可迭代协议。   

      >2 迭代器

        # 迭代器:内部含有'__iter__'并且含有'__next__'方法的就是迭代器,遵循迭代器协议。

      >迭代器的作用

        # 1,节省内存.
        # 2,惰性机制.
        # 3, 一条路走到黑,不走回头路.

    四:生成器

      >1

        # 生成器本质就是迭代器,生成器是自己用python代码写的迭代器。

      

    # 生产衣服
    
    # def cloth():
    #     for i in range(5001):
    #         print('我写的代码没有bug 衣服%s号' % i)
    # cloth()
    #
    # def cloth2():
    #     for i in range(5001):
    #         yield  '有志青年 衣服%s号' % i           #用的时候才调用
    #
    # genor = cloth2()
    # for i in range(100):
    #     print(next(genor))
    #
    # for i in range(50):
    #     print(next(genor))

      > send    next

       1: send   ,  有返回值,返回给上一个迭代器. 如果为开头则报错

    #
    # def func():
    #     count = yield 666
    #     print(count)
    #     num = yield '三包春药'
    #     print(num)
    #     yield '太白金星'
    #     n1 = yield '小虎'
    #     print(n1)
    # genor = func()
    # print(next(genor))
    # print(next(genor))
    # send不仅能对应yield取值,而且可以给上一个yield发送一个值
    # print(genor.send(None))
    # print(genor.send('alex'))
    # print(genor.send('111'))
    # print(genor.send('111'))
    # print(genor.send('111'))
    # 第一次取值能否用send传参? 不能
    # 最后一个yield 永远也得不到send的传的值

       2:yeild from    把列表变成迭代器

    # def func():
    #     lst = ['明亮', '容先', '王子', '万赵']
    #     yield from lst
    # genor = func()
    print(genor.__next__())
     

     五:列表推导式

    # 列表推导式:用一行代码构建简单,较复杂的列表。
    # 减少代码量,装逼。
    #三种:
    # 1,循环模式。 [变量(加工后的变量) for 变量 in iterable ]
    # print([i for i in range(1,101)])
    # 构建一个列表:['python1期', 'python2期',....'python25期']
    # l1 = ['python%s期' %i for i in range(1,26)]
    # print(l1)
    
    # 2 ,三元模式(循环模式)
    # 构建一个列表:列表里面的元素是1~20,但是能被3整除元素替换成*。
    # ret = '*' if 3>2 else 1
    # print(ret)
    # print(['*' if i % 3 == 0 else i for i in range(1,21)])
    
    
    # 3,筛选模式  [变量(加工后的变量) for 变量 in iterable if 条件]
    # 三十以内所有的偶数留到列表中
    # print([i for i in range(1,31) if i % 2 == 0])

    六: 匿名函数

    func2 = lambda x,y: x + y
    print(func2(3,4))
    
    # 写一个匿名函数:需要三个数字参数,返回值为三个数相乘

      

  • 相关阅读:
    [CF600E]Lomsat gelral
    [BZOJ3237]连通图
    [CF580D]Kefa and Dishes
    [BZOJ4726]Sabota?
    bzoj2120&&2453 -- 带修改莫队
    bzoj4726 [ POI2017 ] -- 树形DP
    bzoj2809 [ APIO2012 ] -- 主席树
    bzoj4216 -- 分块
    bzoj4173 -- 欧拉函数
    bzoj2982 -- Lucas定理
  • 原文地址:https://www.cnblogs.com/baili-luoyun/p/10217122.html
Copyright © 2011-2022 走看看