1.函数的递归调用
# 函数的递归调用:就是在调用的过程中又直接或间接的调用自己
# 直接调用自己
# def foo():
# print('hello')
# foo()
#
# foo()
# 间接调用
# def bar():
# print('from bar')
# foo()
#
# def foo():
# print('hello')
# bar()
#
# foo()
# 为何死递归会抛出异常???
# 因为无限的递归会导致内存溢出,所以python设定了最大递归层数
# 所以:不应该无限递归调用下去,应该是在满足某种条件下结束递归调用,然后返回
# 二.递归调用应该分为两个阶段
# 1.回溯(挖井) :一层一层的递归下去
# 2.递推(从井里往外推) :在某一条件满足的情况下结束回溯,然后一层一层的返回
# salary(5) = salary(4) + 10 # 这里我们做一个猜岁数的游戏 我们只知道其中一个人的岁数以及其他人之间的岁数关系
# salary(4) = salary(3) + 10
# salary(3) = salary(2) + 10
# salary(2) = salary(1) + 10
# salary(1) = 18 # 用数学算式来表达其中关系
# n=1 salary(n) = 18 # 这里就可以用循环,根据已知条件来创造一个函数递归
# n!=1 salary(n) = salary(n-1) + 10
# def saraly(n):
# if n == 1: # 当是第一个人的时候
# return 18 # 返回18岁
# return saraly(n-1)+10 # 不是就继续运行函数并加上10岁,直到递归到最后一个人 再将前面递归的值一一递推回去
# res = saraly(5)
# print(res)
# num = [111,[222,[333,[444,[5555,[6666]]]]]]
#
# def func(l):
# for i in l:
# if type(i) is list:
# func(i)
# else:
# print(i)
# func(num) # 面对多列表嵌套可以用函数的递归来实现取值
# 二分查找
# def binary_search(list,item):
# low = 0
# high = len(list)-1
# while low <= high:
# mid = (low+high)//2
# g = list[mid]
# if g == item:
# return g
# if g
# print(g)
# low = mid+1
# else:
# print(g)
# high = mid-1
#
# l = [i for i in range(100)]
# res = binary_search(l,66)
# print(res)
# 利用递归查找
def b(list,item):
high =len(list)
if len(list) ==0:
print('找不到')
return
mid = high//2
g = list[mid]
if g == item:
print(g)
return g
if g < item:
print(g)
x = list[mid+1:high]
return b(x,item)
else:
print(g)
x = list[:mid]
return b(x,item)
l = [ifor iin range(102)]
res = b(l,66)
print(res)
2,三元表达式
def max2(x,y):
if x
return y
if x>y:
return x
# 三元表达式:表达式1 if 条件 else 表达式2
x =111
y =222
res = xif x>yelse y# 如果x>y那么res=x否则rex=y
print(res)
3,匿名函数
# 就是没有名字的函数
res = (lambda x,y:x+y)(1,2)
print(res)# 直接调用 这种方法不常用
f =lambda x,y:x+y
print(f)
f(1,2)# 这样做没有意义 不如定义一个有名函数
# 特点:没有名字,意味着只能用一次,用完之后就是垃圾了,所以匿名函数只用于临时用一次的场景
salaries = {
'egon':4.4,
'lqz':3.3,
'yj':2.2
}
# def func(k):
# return salaries[k] # 由于我们想要按照薪资来进行排序 用来进行比较的值一定是薪资而不是max函数默认的key 所以可以在其后面
# 加一个’key=‘来比较我想要比较的值 这里匿名函数就起作用了 如果重新定义一个函数太浪费了 那就用
# 一个匿名函数在使用期间来调用想要的值就够了
print(max(salaries,key=lambda k:salaries[k]))
print(sorted(salaries,key=lambda k,:salaries[k],reverse=True))
4,模块
'''
1,什么是模块
模块就是一个功能的集合体,不是用来直接运行的,而是用来被导入使用的
模块分为三大来源: 1,内置模块 2,第三方模块 3,自定义模块
模块分为四种类别: 1,一个py文件就是一个模块 2,一个文件夹也是一个模块===》包 3,已被编译为共享库或DLL的C或C++扩展 4.使用C编写并链接到python解释器的内置模块2,为何要用模块
使用别人模块: 1,拿来主义,提升开放效率
自定义模块: 1,别人的功能不够用了,需要自己去编写 2,解决代码冗余3,如何使用模块
'''