day16

今日内容:
    1、函数递归调用
    2、小案例:二分法
    3、三元表达式、匿名函数
    4、模块
        import
        from ... import ...

# 函数递归调用
'''
# 一:引入
# 函数的递归调用:就是在调用一个函数的过程中又直接或间接地调用自己
# 示例1:直接调用自己
# def foo():
#     print('hello')
#     foo()
#
# foo()
# 示例2:间接调用自己
# def bar():
#     print('from bar')
#     foo()
#
# def foo():
#     print('hello')
#     bar()
#
# foo()

# 为何死递归会抛出异常?
# 因为无限的递归会导致内存溢出,所以python设定了最大的递归层数
# 所以不应该无限递归调用下去,应该在满足某种条件下结束递归调用,然后返回
# import sys
# print(sys.getrecursionlimit())        # 查看python中内置的最大递归深度
# print(sys.setrecursionlimit(2000))    # 修改内置最大递归深度


# 二:递归调用应该分为两个阶段
# 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 salary(n):
#     if n == 1:
#         return 18
#     return salary(n-1) + 10
#
# print(salary(5))

# 取出列表中所有数字
# nums=[111,[222,[333,[444,[5555,[6666,[777,[888,[9999]]]]]]]]]
# def func(l):
#     for x in l:
#         if type(x) is list:
#             # 把自身的代码重新再调用一次
#             func(x)
#         else:
#             print(x)
# func(nums)


# 三、二分法
# 从小到大排列的一个数字列表
# nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
# def search(l, find_num):
#     mid_num = len(l) // 2
#     print(l)
#     if len(l) == 0:
#         print('不存在')
#         return
#     elif find_num > l[mid_num]:
#         right_l = l[mid_num + 1:]
#         search(right_l, find_num)
#     elif find_num < l[mid_num]:
#         left_l = l[:mid_num]
#         search(left_l, find_num)
#     else:
#         print('find it')
#
# search(nums,18)
'''

# 三元表达式
'''
# 三元表达式:表达式1 + if条件 + else + 表达式2
# x = 111
# y = 222
# s = x if x > y else y
# print(s)
'''

# 匿名函数 lambda
'''
# 匿名函数即没有名字的函数
# res=(lambda x, y : x + y)(1,2)
# print(res)

# salary = {
#     'a': 11,
#     'b': 22,
#     'c': 33
# }
# def func(k):
#     return salary[k]
# print(max(salary, key=func))
# print(max(salary, key=lambda k: salary[k]))
# print(min(salary, key=lambda k: salary[k]))
# print(sorted(salary, key=lambda k: salary[k], reverse=True))
'''

# 模块
'''
# 1、什么是模块
#     模块就是一个功能的集合体,不是用来直接运行,而是用来被导入使用的
#
#     模块分为三大来源:
#         1、内置的模块
#         2、第三方模块
#         3、自定义的模块
#
#     模块分为四种类别:
#         1、一个py文件就是一个模块
#         2、一个文件夹也是一个模块-->包
#         3、已被编译为共享库或DLL的C或C++扩展
#         4、使用C编写并链接到python解释器的内置模块
#
# 2、为何要用模块
#     使用别人的模块:
#         1、拿来主义,提升开发效率
#     自定义模块:
#         1、别人的功能不够用了,需要自己去编写
#         2、解决代码冗余
#
# 3、如何用模块


# 文件名是spam.py,模块名则是spam
# import spam
# 首次导入模块发生的事
# 1、产生一个模块的名称空间,触发被导入的模块的运行,把模块中的名字都放进去
# 2、会在当前执行文件中得到一个名字spam,该名字是指向被导入模块的名称空间的

# 之后的导入,名字spam直接引用首次导入产生的名称空间,不会再执行模块内的代码了
# import spam
# import spam
# import spam

# money = 2000
# def read1():
#     print('7.23')
# print(money)
# print(spam.money)
# read1()
# spam.read1()
# spam.change()
# print(spam.money)

# 一行导入多个模块
# import spam,m1,m2,m3      # 不推荐

# 为导入的模块起别名
# import spamasdfasfsadfadfasfd as m
# m.xxx
# 示例:
# #mysql.py
# def sqlparse():
#     print('from mysql sqlparse')
# #oracle.py
# def sqlparse():
#     print('from oracle sqlparse')
#
# #test.py
# db_type=input('>>: ')
# if db_type == 'mysql':
#     import mysql as db
# elif db_type == 'oracle':
#     import oracle as db
#
# db.sqlparse()

# from ... import ...           # 容易发生变量名冲突,不推荐
# 文件名是spam.py,模块名则是spam
# from spam import money,read1,read2       # 相当于money=spam.money,read1=spam.read1,read2=spam.read2
# 首次导入模块发生的事情
# 1、产生一个模块的名称空间,触发被导入的模块的运行,把模块中的名字都放进去
# 2、会在当前执行文件中得到名字
#    money=模块spam中的money对应值的内存地址
#    read1=模块spam中的read1对应值的内存地址
#    read2=模块spam中的read2对应值的内存地址

# print(money)
# print(read1)
# print(read2)
#
# money=111
# print(money)
#
# money=2000
# read1()

# def read1():
#     print('run.py read1')
# read2()


# 一行导入多个名字
# from spam import money,read1
# 为导入的模块起别名
# from spam import money as m
# print(m)

# '*' 可用来导入模块中所有名字,可在被导入模块中用__all__来限定导入的名字
# (例:在被导入模块中开头写上__all__ = ['money', 'read1'])
# from spam import *
# print(money)
# print(read1)
# print(read2)              # 报错
# print(change)             # 报错
'''

 

posted @ 2020-07-23 20:09  板鸭没有腿  阅读(122)  评论(0)    收藏  举报