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)