day15

                                                   自定义带参装饰器 

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

                

                                          生成器send用法

1.工作原理

 

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.递归回溯递推的条件一定有规律


求n的阶乘 5! = 5 * 4 * 3 * 2 * 1 = 120

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.返回值必须明确成一个值,可以为单个值对象,也可以为一个容器对象

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

 


                 max结合匿名工作原理

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

dic = {

       'owen':(1,88888),

       'zero':(2,66666),

       'tom':(3,77777),

      }

print(max(dic,key = lambda k:dic[k][1]) →owen      取薪金最高的key

print(max(dic,key = lambda k:dic[k][0]) →tom       取号最高的key

print(max(dic,key = lambda k:k)         →zero      取名字首字母最高的key

 

map:映射    #几个参数对应几个输出

reduce:合并  #将函数求出的值求和

 

                             常用的内置函数

 

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

 

print(ord('A'))       #字符转ASCII码
print(chr(97))        #ASCII码转字符

 

# 2.进制转化
print(bin(10))→1010     #十进制转二进制
print(oct(10))→12       #十进制转八进制
print(hex(10))→a        #十进制转十六进制

 

print(0b1111)→15       #二进制转十进制
print(0o10)→8          #八进制转十进制
print(0x11)→17         #十六进制转十进制

 


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

 

# 4.原义字符串
print(r'a\nb')
print(ascii('a\nb'))
print(repr('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

 

 

 

 

posted @ 2019-04-30 15:46  呼吸决定丶  阅读(98)  评论(0)    收藏  举报