zoukankan      html  css  js  c++  java
  • 函数中方法: 小知识点: 0.sys模块--补充 1.函数递归 2.二分法 3.三元表达式 4.列表生成式 5.字典生成式 6.匿名函数 7.常用内置函数 --- # 12

    """

    今日知识点:
    0.sys模块--补充
     1 """
     2 # 补充:
     3 sys模块   (建文件防止重命名)  系统(意思)
     4 sys 功能: SYS可将当前驱动器上的DOS系统文件IO.SYS,MSDOS.SYS传送到指定的驱动器上,用于创建启动盘。
     5 """
     6 import sys
     7 # 求Python可支持的递归深度
     8 print(sys.getrecursionlimit())  # 1000  # 结果不是很精确
     9 # 自定义递归深度
    10 sys.setrecursionlimit(200)  # 不能高于最大值
    11 print(sys.getrecursionlimit())  # 200
    sys模块 -补充
    1.函数递归
     1 """
     2 函数的递归:
     3 1.定义
     4     1.函数在调用阶段直接或间接的调用自身
     5     2.判断特点:调用自身
     6     3.方法:直接调用 | 间接调用
     7     4.必须条件,不应该无限循环下下去,需要有最终的结束条件
     8 
     9 """
    10 '''
    11 # 函数自调用
    12 def func():
    13     print('递归')
    14     func()
    15 func()
    16 # 值:
    17 RecursionError: maximum recursion depth exceeded while calling a Python object 
    18 # 递归错误:调用python对象时超过了最大递归深度
    19 '''
    20 # 求递归深度方法
    21 # 方法一
    22 """
    23 import sys
    24 # 求Python可支持的递归深度
    25 print(sys.getrecursionlimit())  # 1000  # 结果不是很精确
    26 # 自定义递归深度
    27 sys.setrecursionlimit(200)  # 不能高于最大值
    28 print(sys.getrecursionlimit())  # 200
    29 """
    30 
    31 '''
    32 # 方法二
    33 def func(n):
    34     print('n>>>:',n)
    35     func(n+1)
    36 func(1)  # n 记得传参
    37 
    38 # 值: 递归深度  == 998 # 之后报错
    39 RecursionError: maximum recursion depth exceeded while calling a Python object
    40 # 递归错误:调用python对象时超过了最大递归深度
    41 '''
    42 '''
    43 # 函数不应该无限制的递归下去
    44 def index():
    45     print('from index')
    46     login()
    47 
    48 def login():
    49     print('from login')
    50     index()
    51 
    52 login()
    53 
    54 # 值
    55 报错:
    56 RecursionError: maximum recursion depth exceeded while calling a Python object
    57 # 递归错误:调用python对象时超过了最大递归深度
    58 '''
    59 """
    60 2.递归的过程:
    61      递归分为两个阶段:
    62         1.回溯:1.就是一次次重复的过程,这个重复的过程必须建立在,这个过程每次重复复杂度都会相应下降 2.直到有一个最终的结束条件
    63         2.递推:一次次往回推导的过程
    64 """
    65 # 案例:
    66 # 递归函数
    67 '''
    68 age(5) = age(4) + 2
    69 age(4) = age(3) + 2
    70 age(3) = age(2) + 2
    71 age(2) = age(1) + 2
    72 age(1) = 18
    73 age(n) = age(n-1) + 2  # n > 1
    74 age(1) = 18 # n = 1
    75 '''
    76 def get_age(n):
    77     if n == 1:
    78         return 18
    79     return get_age(n-1)+2
    80 res = get_age(12)
    81 print(res)  # 40
    82 
    83 def get_time(s):
    84     if s == 1:
    85         return 18
    86     return get_time(s-1) - 1
    87 res1 = get_time(4)
    88 print(res1)  # 15
    函数递归
     1 l = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,]]]]]]]]]]]]]
     2 # 将列表中的数字依次打印出来(循环的层数是你必须要考虑的点)
     3 # print(l[0]) # 1
     4 # print(l[1][0]) # 2
     5 # print(l[1][1][0]) # 3
     6 # l2 = []
     7 # for i in l:
     8 #     if type(i) is int:
     9 #         l2.append(i)
    10 # print(l2)
    11 
    12 
    13 def get_list(l):
    14     l1 = []
    15     for i in l:
    16         if type(i) is int:
    17             print(i)
    18             l1.append(i)
    19         else:
    20             get_list(i)
    21 
    22 res = get_list(l)
    23 # print(res)
    24 l2 = []
    25 l1 = []
    26 print(l)
    27 for i in l1:
    28     print(i)
    29 
    30 #ps: 递归函数不要考虑循环的次数 只需要把握结束的条件即可********** 结束的条件
    函数递归案例
    2.二分法
    ps:容器里的数字必须有大小顺序
     1 # 算法:解决问题的高效率的方法
     2 l = [1,3,5,12,57,89,101,123,146,167,179,189,345]
     3 # num = 345
     4 # for i in l:
     5 #     if num == i:
     6 #         print('1222234586')
     7 #ps: 二分法:容器类型里面的数字必须有大小顺序
     8 # target_num = 999
     9 def get_num(l,target_num):
    10     if not l:
    11         print('无对比值,无法顺利工作')
    12         return
    13     else:
    14         # 获取列表中间的索引
    15         print(l)
    16         middle_index = len(l) // 2
    17         # 判断target_num 和l[middle_index] 数字的大小
    18         if target_num > l[middle_index]:
    19             # 窃取列表右半部分
    20             num_right = l[middle_index + 1:]   # 后半部分
    21             # 再递归调用get_num函数
    22             get_num(num_right, target_num)
    23         elif target_num < l[middle_index]:
    24             num_left = l[0:middle_index]  # 前半部分
    25             # 再递归调用get_num函数
    26             get_num(num_left, target_num)
    27         else:  # ==
    28             print('find it',target_num)
    29 
    30 res = get_num(l,target_num=345)
    31 print(res)
    32 '''
    33 # 值
    34 [1, 3, 5, 12, 57, 89, 101, 123, 146, 167, 179, 189, 345]
    35 [123, 146, 167, 179, 189, 345]
    36 [189, 345]
    37 find it 345
    38 None
    39 '''
    二分法
    3.三元表达式
     1 def my_max(x,y):
     2     if x > y:
     3         return x
     4     else:
     5         return y
     6 """
     7 当x大的时候返回x当y大的时候返回y
     8 当某个条件成立做一件事,不成立做另外一件事
     9 """
    10 x = 99999
    11 y = 9898898
    12 res = x if x > y else y
    13 # 如果if后面的条件成立返回if前面的值 否则返回else后面的值
    14 print(res)
    15 
    16 
    17 """
    18 三元表达式固定表达式
    19     值1 if 条件 else 值2
    20         条件成立 值1
    21         条件不成立 值2
    22 """
    23 # x = 1
    24 # y = 2
    25 # m = 3
    26 # n = 4
    27 # res = x if x > y else (m if m >n else (...))
    28 
    29 # 三元表达式的应用场景只推荐只有两种的情况的可能下
    30 # is_free = input('请输入是否免费(y/n)>>>:')
    31 # is_free = '免费' if is_free == 'y' else '收费'
    32 # print(is_free)
    33 
    34 
    35 # username = input('username>>>:')
    36 # res = 'NB' if username == 'jason' else '垃圾'
    37 # print(res)
    三元表达式
    4.列表生成式
     1 # 列表生成式 [列表值,for循环条件]
     2 
     3 l = ['tank','nick','oscar','sean']
     4 l1 = []
     5 for name in l:
     6     # 加后缀的两种方式
     7     l1.append('%s_sb'%name)
     8     l1.append(name + '_sb')  # 加后缀
     9 print(l1)
    10 
    11 l = ['tank_sb', 'nick_sb', 'oscar_sb', 'sean_sb','jason_NB']
    12 # 列表生成式:
    13 res = ['%s_DSB'%name for name in l]
    14 print(res)  # ['tank_sb_DSB', 'nick_sb_DSB', 'oscar_sb_DSB', 'sean_sb_DSB', 'jason_NB_DSB']
    15 
    16 res1 = [name for name in l if name.endswith('_sb')]  # 后面不支持再加else的情况
    17 # 先for循环依次取出列表里面的每一个元素
    18 # 然后交由if判断  条件成立才会交给for前面的代码
    19 # 如果条件不成立 当前的元素 直接舍弃
    20 
    21 print(res1)  # ['tank_sb', 'nick_sb', 'oscar_sb', 'sean_sb']
    列表生成式
    5.字典生成式
     1 # 字典生成式  列表与for生成字典
     2 
     3 # l1 = ['name','password','hobby']
     4 # l2 = ['jason','123','DBJ','egon']
     5 # d = {}
     6 # for i,j in enumerate(l1):
     7 #     d[i] = l2[i]
     8 # print(d)  # {0: 'jason', 1: '123', 2: 'DBJ'}
     9 
    10 l1 = ['jason','123','read']
    11 # 字典生成式格式
    12 d = {i:j for i,j in enumerate(l1) if j != '123'}
    13 print(d)  # {0: 'jason', 2: 'read'}
    14 
    15 res = {i for i in range(10) if i != 4}
    16 print(res)
    17 res1 = (i for i in range(10) if i != 4)  # 这样写不是元组生成式 而是生成器表达式
    18 # print(res1)
    19 # for i in res1:
    20 #     print(i)
    字典生成式
    6.匿名函数
     1 """
     2 匿名函数:
     3    特性:
     4        1.没有名字函数
     5        2.临时存在用完就没了
     6 
     7 """
     8 # 正常函数
     9 def func(x,y):
    10     return x,y
    11 # 匿名函数
    12 '''
    13 1.省略 def
    14 2.用lambda代替函数名
    15 3.return x+y 省略 用: x+y
    16 '''
    17 # 格式:
    18 res = (lambda x,y:x+y)
    19 # print(res)
    20 print(res(1,2))  # 3
    21 
    22 # ps:
    23 # 1.:左边的相当于函数的形参
    24 # 2.:右边的相当于函数的返回值
    25 # 3.匿名函数通常不会单独使用,是配合内置函数一起使用
    匿名函数
    7.常用内置函数
     1 # 1.max()  # 求最大值
     2 l = [1,2,3,4,5]
     3 print(max(l))  # 内部是基于for循环的  # 5
     4 # 2.min() # 求最小值
     5 print(min(l)) # 1
     6 # 3.chr() 将数字转换成ascii码表对应的字符  # a
     7 # A-Z  65 90
     8 # a-z  97 122
     9 # 4.zip()拉链
    10 l1 = [1,2,3]
    11 l2 = ['jason','egon','tank']
    12 l3 = ['a','b','c']
    13 print(list(zip(l1,l2,l3)))   # [(1, 'jason', 'a'), (2, 'egon', 'b'), (3, 'tank', 'c')]
    14 # 5.filter() 过滤
    15 l = [1,2,3,4,5,6]
    16 print(list(filter(lambda x:x != 3,l)))  # 基于for循环  #[1, 2, 4, 5, 6]
    17 # 6.sorted() 排序
    18 l = ['jason','egon','nick','tank']
    19 # reverse # 颠倒
    20 print(sorted(l,reverse=False)) #['egon', 'jason', 'nick', 'tank']
    21 # reverse= True['tank', 'nick', 'jason', 'egon']
    22 # 7.reduce() 求列表的运算
    23 from functools import reduce
    24 l = [1,2,3,4,5,6]
    25 print(reduce(lambda x,y:x+y,l,18))  # 39
    26 # 8.map()  # 映射
    27 l = [1,2,3,4,5,6]
    28 # print(list('hello'))
    29 print(list(map(lambda x:x+5,l)))  # 基于for循环  # [6, 7, 8, 9, 10, 11]
    常用内置函数

    """

  • 相关阅读:
    【.NET】VS2013创建Windows服务与调试服务
    【JS】处理数据四舍五入(tofixed与round的区别详解)
    【微信小程序】 基础语义笔记2:基本组件、获取节点信息
    面向对象和面向过程的优点和缺点
    【微信小程序】 基础语义笔记1:配置、页面文件、组件。
    【微信小程序】 wxParse组件
    zookeeper 碎片知识点
    zookeeper 基本概念
    RocketMQ 知识点
    单例模式---双层检验锁+volatile
  • 原文地址:https://www.cnblogs.com/llx--20190411/p/11178234.html
Copyright © 2011-2022 走看看