1.三元表达式
符合Python语法的表达方式(形式,公式)称之为表达式
三元,三个元素
总体就是由三个元素组成的表达式
其目的是为了简化书写既然是简化必然有局限性
三元表达式·只能帮你简化两个分支的if 判断,无论这个判断条件是否成立都必须返回一个值
2.递归
指的是递归调用,简单地说就是一个函数在执行是过程直接或间接调用了本身
递归时可能出现以下错误:
在调用函数时超出最大递归深度
Python为了防止递归无限制占用内存,对函数的递归的调用做了最大的层级限制
修改方法
import sys
sys.getrecursionlimit()
sys.setrecursionlimit(2000)
递归分为回溯和递推
回溯就是从外向里一层一层递归调用下去,
回溯阶段必须要有一个明确的结束条件,每进入下一次递归时,问题的规模都应该有所减少(否则自身毫无意义)
递推就是从里向外一层一层结束递归
总结递归的使用:
1.必须有一个明确的结束条件
2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack) 这种数据结构实现的,每次进入一个函数调用,栈就会加一层栈,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多就会导致 栈溢出)
二分查找法
分成俩。。。。找不到继续分(前提是从小-----大/从大-----小)
[1,2,10,30,33,99,101,200,301,311,402,403,500,900,1000]
def search(n,l):
print(l)
if len(l) == 0:
print('not exists')
return
mid_index=len(l) // 2
if n > l[mid_index]:
#in the right
l=l[mid_index+1:]
search(n,l)
elif n < l[mid_index]:
#in the left
l=l[:mid_index]
search(n,l)
else:
print('find it')
search(3,l)
l=[1,2,10,30,33,99,101,200,301,402]
def search(num,l,start=0,stop=len(l)-1):
if start <= stop:
mid=start+(stop-start)//2
print('start:[%s] stop:[%s] mid:[%s] mid_val:[%s]' %(start,stop,mid,l[mid]))
if num > l[mid]:
start=mid+1
elif num < l[mid]:
stop=mid-1
else:
print('find it',mid)
return
search(num,l,start,stop)
else: #如果stop > start则意味着列表实际上已经全部切完,即切为空
print('not exists')
return
search(301,l)
3.匿名函数
就是没有名字
与函数作用域相同,但是匿名意味着引用计数为0,只能使用一次
lambd 关键字
有名函数:循环使用,保存了名字,通过名字就可以重复引用函数功能
匿名函数:随时定义,一次使用
应用:max ,min ,sorted , map, reduce ,filter