Python学习-Day16

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,如何使用模块

'''

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容