day 12

1.装饰器的补充:
from functools import wraps
ef deco(func):
    @wraps(func)    >>>>可以完全将装饰器包装成与被修饰器一样的注释
    def wrapper(*args, **kwargs):
        res = func(*args, **kwargs)
        return res
    # wrapper.__name__=func.__name__
    # wrapper.__doc__=func.__doc__
    return wrapper

2.函数的递归:函数嵌套调用的一种特殊形式,在调用一个函数的过程中又直接或则间接的调用该函数
   递归调用的两个阶段:
                    1.回溯:一次次递归调用下去,谁白了就一个重复的过程,但需要注意的是每一次的重复问题的规模都应该减少,直到逼近一个最终的结果,即回溯阶段一定要有一个明确的结束条件

                    2.递推:往回一层一层推算出结果.
    算法:是如何高效的解决某一个问题的方法和套路
    相关的练习:
1.
l=[1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,]]]]]]]]]]]
def foo(l):
    for i in l:
        if type(i)==int:
            print(i)
        else:
            foo(i)
foo(l)
2.利用二分法查找列表里面的元素
nums=[13,15,17,23,31,53,74,81,93,102,103,201,303,403,503,777]
def foo(number, nums):
    len_list = len(nums) // 2
    print(nums)
    if len(nums) == 0:
        print("do not find ")
        return 1
    if number < nums[len_list]:
        nums = nums[0:len_list]
        return foo(number, nums)
    elif number > nums[len_list]:
        nums = nums[len_list + 1:]
        return foo(number, nums)
    else:
        print("find it ")

foo(101,nums)

三.三元表达式:
实现的效果是:条件成立的情况下的返回一个值,不成立的情况下返回另一个只值

res=条件成立情况下的返回值 if 条件 else 条件不成立的情况下返回值
name = input(">>>>>").strip()
res ="sb" if name=="jjj" else "Nb"
print(res)


四.列表生成式 字典生成式


1. 列表生成式:res=[里面的元素在进行才操作 for循环一个列表]




2.字典生成式:利用enumerate内置的函数
######################################
name=["jxl",'egon','yyh']
age=['12','14','23']
dis={k:age[i] for i,k in enumerate(name)}
print(dis)
########################################

name=["jxl",'egon','yyh']
age=['12','14','23']
dis={}
for i,k in enumerate(name):
    dis[k]=age[i]
print(dis)


五. 匿名函数:就是没有名字的函数(仅仅临时使用一次,没有重复的使用的需求)
    精髓:就是没有名字,为其绑定名字没有意义,一般与内置函数结合使用
    关键字:lambad      print((lambda x,y:x+y)(11,22))

六.内置函数:  max  min  sorted  map filter reduce

max:可以通过max函数的key参数来改变max函数的比较依据.
    运行原理:max函数会"for 循环"出一个值,
    然后将该值传给key指定的函数,调用key指定的函数,将拿到的给返回值当做比较数据
salaries={
    'egon':300000,
    'alex':100000000,
    'wupeiqi':10000,
    'yuanhao':2000
}
print(max(salaries,key=lambda name:salaries[name]))

min(最小值):与max原理相似


sorted;排序

nums=[11,33,22,9,31]
res=sorted(nums,reverse=True)  >>将得到另一个列表,原来的列表并没有改变

# res=sorted(salaries,key=lambda name:salaries[name],reverse=True)
# print(res)

map:把一个列表按照我们自定义的映射规则映射成一个新的列表
names=['alex','lxx','wxx','yxx']
res=map(lambda name: name + "dSB", names)
print(list(res))

names=['alex','lxx','wxx','yxx']
res=[i+"dsb" for i in names]
print(res)



filter: 从一个列表中过滤出符合我们过滤规则的值
         运行原理:相当于for循环取出每一个人名,然后传给匿名函数,
                   将调用匿名函数返回值为True的那个人名给留下来

names=['alex_sb','lxx_sb','wxx_sb','egon','yxx']

 res=filter(lambda name:name.endswith('sb'),names)
 print(list(res))

 print([name for name in names if name.endswith('sb')])


reduce: 把多个值合并成一个结果: from functools import reduse

from functools import reduce
l=['a','b','c','d']

# res=reduce(lambda x,y:x+y,l,'A')
#'A','a' => 'Aa'
#'Aa','b'=>'Aab'
#'Aab','c'=>'Aabc'
#'Aabc','d'=>'Aabcd'
# print(res)
原文地址:https://www.cnblogs.com/jxl123/p/9409225.html