• day15


    复习

    '''
    1.带参装饰器 - 自定义 | wraps

    def wrap(info)
      def outer1(func):
      from functools import wraps
      @wraps(func)
          def inner(*args, **kwargs):
              # 需要外界的参数
              return func(*args, **kwargs)
          return inner
      def outer2(func):
          def inner(*args, **kwargs):
              # 需要外界的参数
              return func(*args, **kwargs)
          return inner
      if info == '1':
      return outer1
      return outer2
       
    # outer = wrap('1')
    # @outer
    @wrap('1')
    def fn():pass


    2.可迭代对象:有__iter__()方法的对象,并且调用__iter__()方法得到迭代器对象

    3.迭代器对象:有__next__()方法的对象,并且调用__next__()方法从前往后逐一取值
    # 不依赖索引取值,但必须从前往后依次取值(无法获取索引,也无法计算长度)

    4.for循环迭代器
    1)得到操作对象的迭代器对象
    2)通过__next__()进行取值
    3)自动处理StopIteration异常,结束循环

    5.枚举对象:为被迭代的对象添加迭代索引

    6.生成器:语法同函数,内部包含yield关键字,函数名() 不是函数调用,而是得到生成器对象 -> 就是自定义的迭代器对象

    '''

    with open('abc.txt', 'r', encode='utf-8') as f:
       for line in f:
           pass
       
    def fn():
       # ...
       yield 1
       # ...
       yield 2
    obj = fn()
    res = next(obj) # 1
    fn().__next__() # 1
    fn().__next__() # 1
    fn().__next__() # 1

     

    今日内容

    '''
    1.生成器的send方法 了了解

    2.递归:函数自己调自己

    3.匿名函数

    4.内置函数
    '''

     

    生成器send方法

    # send的工作原理
    # 1.send发生信息给当前停止的yield
    # 2.再去调用__next__()方法,生成器接着往下指向,返回下一个yield值并停止

    # 案例:
    persons = ['张三', '李四', '王五', '赵六', '钱七']

    def order(persons):
       for i in range(len(persons)):
           if i == 0:
               print('%s在面试' % persons[0])
           else:
               print('%s叫%s在面试' % (name, persons[i]))
           print('%s面试完毕' % persons[i])
           name = yield persons[i]

    obj = order(persons)
    for i in range(len(persons)):
       if i == 0:
           p = obj.__next__()
       else:
           p = obj.send(p)
       print('=============================')

     

     

     

    递归

    # 递归:
    # 函数直接或间接调用本身,都称之为递归
    # 回溯:找寻答案的过程
    # 递推:推出结果的过程

    # 前提条件:
    # 1.递归必须有出口
    # 2.递归回溯递推的条件一定有规律


    # 案例一:获得第 count 个人的年纪
    def get_age(count):
       if count == 1:
           return 58
       # 第 九...一 个人 - 2
       age = get_age(count - 1) - 2
       return age

    age = get_age(3)
    print(age)


    # 案例二:求n的阶乘 5! = 5 * 4 * 3 * 2 * 1 = 120
    # 5! = 5 * 4!
    # 4! = 4 * 3!
    # 3! = 3 * 2!
    # 2! = 2 * 1!
    # 1! = 1
    def jiecheng(n):
       if n == 1 or n == 0:
           return 1
       ji = n * jiecheng(n - 1)
       return ji
    res = jiecheng(5)
    print(res)

     

    匿名函数

    def fn(*args, **kwargs):
       # 函数体
       return '返回值'

    # 匿名函数:
    # 1.匿名函数没有函数名
    # 2.匿名函数的关键字采用lambda
    # 3.关键字 lambda 与标识函数功能体 : 之间一定是参数,所以省略()
    # 4.匿名还是没有函数体,只有返回值,所以函数体和返回值的return关键字都省略了

    lambda *args, **kwargs: '返回值'

    # 注意:
    # 1.参数的使用和有名函数一样,六种形参都支持
    # 2.返回值必须明确成一个值,可以为单个值对象,也可以为一个容器对象

    a = lambda *args, **kwargs: '返回值1', '返回值2'
    print(a)  # (<function <lambda> at 0x0000022D0B7E88C8>, '返回值2')
    # 返回值1
    print(a[0]())


    # 正确返回两个值: 主动构成成容器类型
    lambda *args, **kwargs: ('返回值1', '返回值2')

     

    max结合匿名工作原理

    # 1.max内部会遍历iter,将遍历结果一一传给lambda的参数x
    # 2.依据lambda的返回值作为比较条件,得到最大条件下的那个遍历值
    # 3.对外返回最大的遍历值
    max(iter, lambda x: x)


    # min工作原理一样,得到的是最小值

     

    常用的内置函数

    map(lambda x: x * 2, [3, 1, 2]) # 将遍历结果映射为任意类型值 [6, 2, 4]

    from functools import reduce
    reduce(lambda x, y: x * y, [3, 1, 2])  # 6

    sorted(iter, fn, reverse)
    dic = {
       'owen': (1, 88888),
       'zero': (2, 66666),
       'tom': (3, 77777),
    }
    res = sorted(dic, key=lambda k: dic[k][1])
    print(res)  # ['zero', 'tom', 'owen']

    res = sorted(dic, key=lambda k: dic[k][1], reverse=True)
    print(res)  # ['owen', 'tom', 'zero']

    # 1.与类型相关的
    # list() str() ord() chr() bool() int() ...

    print(ord('A'))
    print(chr(97))

    # 2.进制转化
    print(bin(10))  # 1010 10转2
    print(oct(10))  # 12 转8
    print(hex(10))  # a 转16

    print(0b1111)  # 15 2转10
    print(0o10)  # 8     8转10
    print(0x11)  # 17     16转10


    # 3.常用操作类的
    # range() len() iter() next() enumerate() id() type() print() input() open()

    # 4.原义字符串
    print(r'a b')
    print(ascii('a b'))
    print(repr('a b'))


    # 5.数学相关运算
    # abs() sum() max() min() pow() sorted()
    print(abs(-1))
    print(pow(2, 3))  # 2**3
    print(pow(2, 3, 3))  # 2**3%3
  • 相关阅读:
    php面试题
    php最基本的缓存之一页面缓存
    原生PHP生成验证码
    原生PHP实现上传大图片与缩略图
    PHP实现连接数据库下载与导入csv格式文件
    ScrollTop火狐谷歌不兼容
    今天学的是 HTML基本元素、基本语法元素特点等,就发图片吧。
    第三天的学习知识HTML5常用的重要单词
    第二天学习了设计方面的知识
    HTLM5第一天的内容
  • 原文地址:https://www.cnblogs.com/huikejie/p/10798528.html
Copyright © 2020-2023  润新知