生成器 send 方法 递归 匿名函数 max(min)结合匿名工作原理 常用的内置函数

一、生成器 send 方法    二、递归     三、匿名函数    四、max(min)结合匿名工作原理    五、常用的内置函数

 

一、生成器 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)

二、递归

1、递归定义:函数直接或间接调用本身,都称之为递归

2、递归方法:1)回溯:找寻答案的过程

        2)递推:推出结果的过程

3、使用递归的条件:1)递归必须有出口

           2)递归回溯递推的条件一定有规律

案例一:获得第 count 个人的年纪

  def get_age(count):
    if count == 1:
      return 58         # 第 9······第一个人  依次  —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)

三、匿名函数

1、匿名函数没有函数名

2、匿名函数的关键字采用lambda

3、关键字 lambda 与标识函数功能体 : 之间一定是参数,所以省略()

4、匿名还是没有函数体,只有返回值,所以函数体和返回值的return关键字都省略了

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

注意:   1)参数的使用和有名函数一样,六种形参都支持

    2)返回值必须明确成一个值,可以为单个值对象,也可以为一个容器对象

  a = lambda *args, **kwargs: '返回值1', '返回值2'

  print(a)                   ==>     (<function <lambda> at 0x0000022D0B7E88C8>, '返回值2')

  print(a[0]())    # 返回值1

正确返回两个值: 主动构成成容器类型

      lambda  *args, **kwargs : ('返回值1', '返回值2')

四、max 结合匿名工作原理  (min与max工作原理一样,得到的是最小值)

1、max内部会遍历iter,将遍历结果一一传给 lambda 的参数 x

2、依据 lambda 的返回值作为比较条件,得到最大条件下的那个遍历值

3、对外返回最大的遍历值      max(iter, lambda x: x)

五、常用的内置函数

  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()转ascii   chr()转字符   bool()   int() ...

2、进制转化

  bin()二进制0b  oct()八进制0o  hex()十六进制0x

    输出进制时一般会在开头有0b,0o,0x 代表多少进制

3、常用操作类的

  range()   len()   iter()   next()  enumerate()枚举   id()   type()

  print()   input()   open()打开文件

4、原义字符串  r'

  print(r'a\nb')    print(ascii('a\nb'))      print(repr('a\nb'))

                ===>>>  'a\nb'

 5、数学相关运算
  abs()绝对值   sum()总数   max()   min()   pow()   sorted()

  print(abs(-1))                ==> 1

  print(pow(2, 3))        两个参数  # 2**3 

  print(pow(2, 3, 3))         三个参数 # 2**3%3

6、获取帮助

  help()

7、执行字符串

  eval() 去字符串          exec()

8、反射

  getattr()  setattr()  delattr()  hasattr()

9、面向对象的装饰器

  classmethod()  staticmethon()

10、面向对象的其它

  super()  globals()  locals()

 

posted @ 2019-04-30 15:59  水天两色  阅读(274)  评论(0)    收藏  举报