三元表达式
有三个元素组成的表达式
a=10
b=17
s= a if a > b else b
print(s)
递归
def fun():
print("fun run")
fun()
fun()
直接间接调用函数本身
RecursionError: maximum recursion depth exceeded while calling a Python object
超出最大递归深度
python为了防止递归太多,导致内存溢出,所以给递归调用加上深度限制默认为1000
递归调用就是在循环执行代码,与普通循环不一样的是,函数调用会产生内存开销,
当调用函数时,代码会被存储到栈区,叫入栈
在使用递归时
1.在某个条件满足时 停止调用
2.循环调用的次数不能超过系统的限制
3.每次执行都应该使问题减少
li=[1,[2,[3,[4,[5,[6]]]]]]
def showlist(l):
for i in l:
if type(i) == list:
showlist(i)
else:
print(i)
showlist(li)
在不知道循环多少次的情况下用
二分查找法,有序的容器
将整体分为两半,和中间元素进行比较,大走右边,小走左边
1.想得到中间值 比较是不是要找的结果,是就返回
2.如果不是 继续拆为两半,进行比较
li=[1,2,3,4,5,6,7]
def search(li,tar):
if not li:#如果分的列表为空
return False
i = len(li)//2#取中间值
if len(li) == 1:#如果目标不在整个列表 会拿最后一个值死循环
return False
if li[i] == tar:
return True
left=li[:i]
right=li[i:]
if tar > li[i]:#切片 分为左边和右边
return search(right,tar)
else:
return search(left, tar)
print(search(li,7))
匿名函数:
lambda a,b: a if a>b else b
函数中不需要写return,只能有一个表达式,而且不能换行,只能使用一次、
salary={"a":100,"b":1000,"c":2000}
print(max(salary,key=lambda k:salary[k]))
print(min(salary,key=lambda k:salary[k]))