python_12

递归函数:

  递归定义:

    递归就是在函数本身调用自己加上结束语句,在递归中递归最深可达997或998,是python从内存的角度考虑的设置,这个设置可以通过sys模块设置。

递归的定义:

 1 # 年龄:
 2 # a = b+2
 3 # b = c+2
 4 # c = d+2
 5 # d = 40
 6 # 问a多少岁
 7 def func(n): # 传入第几个人的年龄
 8     if n == 4: # 第四个人是年龄是40
 9         return 40
10     elif n > 0 and n <4: # 人不能多不能少
11         return func(n+1) + 2  #找不到的时候问下一个所以n加一,并且上他比上一个人大的年龄
12 print(func(1))

递归函数设置递归深度:

sum = 0
def func():
    global sum
    print(sum)
    sum+=1
    func()
func()
'''
993
994
995
996
Traceback (most recent call last):
997  File "F:/Test/day12/2.递归.py", line 20, in <module>'''

import sys
sys.setrecursionlimit(1200)

sum = 0
def func():
    global sum
    print(sum)
    sum+=1
    func()
func()
'''
1195
1196
1197Traceback (most recent call last):
  File "F:/Test/day12/2.递归.py", line 37, in func'''

  注意:递归可以让代码变得简单可是占内存

算法:

  为什么学算法:

    计算方法:人脑复杂 计算机简单

      查找:找数据

      排序:最短路径排序

二分查找法:

  特点:

    必须处理有序的列表,不断的在中间位置进行比较

简单的二分查找代码:

l = [1,2,3,4,5,6,7,8,9,10,11,22,33,44,55,66,77,88,99]
# 我们要找到66的索引并返回
def indexl(l,aim,min = 0,max = None):
    max = len(l) if max == None else max
    # 计算出中间值
    inte = (max-min)//2 + min#这里用整除,避免有浮点数,
    if l[inte] < aim:
        return indexl(l,aim,inte+1,max = max)
    elif l[inte] > aim:
        return indexl(l,aim,min = min,max = inte)
    else:
        return inte
print(indexl(l,66))

正则表达式:

  正则表达式:--> 字符串匹配

  正则表达式测试网站: tool.chinaz.com/regex

正则表达式的分类:

  字符组:

    [在同一位置可能出现子字符],可以是[开始-结束],

    可以出现多个范围,如A-z可以,则a-Z不可以,大写的字母比小写的小,大写的Z是90,小写的a是97

  元字符:

    是和非放在一起就是全部能匹配字符,包括换行符

    . 匹配任意字符,换行符除外

    \w 匹配字母或数字或下划线(word的意思)  大写代表非

    \s 匹配任意空白字符(spase)  大写代表非

    \d 匹配数字(digit)  大写代表非

    

    \n 匹配换行

    \t 匹配制表符

    

    (可以指定或使用.)\b匹配单词的结尾

    ^ 匹配字符串的开头

    &匹配字符串的结尾

    

    a|b 匹配字符a或b从左到右,如果匹配到了a就不会对b做比较

    () 分组

    [] 字符组

    [^a] a除外都匹配

量词:

   规则: 所有的来歌词都要用在元字符后边,量词后边加+能少匹配就少匹配(惰性)

   * 重复零次或多次

   +重复一次或多次

   ?重复零次或一次

   {n} 重复N次

   {n,} 重复n次或多次

   {n,m} 重复n到m次

字符集:

  字符[^和]*除了和都匹配,重复零次或多次

分组与或和[^]:

  ([][])+  整体进行量词的约束

转义字符\:

  在python的话使用r'\n'可以进行字符的转义

  r是real

非贪婪匹配pattern:

  *? 重复任意字符

  +?重复一次货多次,但是尽可能减少重复

  ??重复0次或一次,但尽可能减少重复

  {n,}?重复n次以上,但尽可能减少重复

.*?的用法:

  . 任意字符

  * 0到无限

  ? 是非贪婪模式

re模块:

三个重要的方法:

  findall(查找全部)(表达式,字符串): 会返回所有满足条件的所有结果,放在列表中

  search()寻找: 从前向后找,找到一个就返回,返回的结果的是对象,需要调用group(组)才能使用,如果找不到会报错,报错时返回的是None,客户使用if判断进行解决报错。

  split() 分割:

  sub('\d','H','str',个数)替换: 

  subn()替换:  全部替换,返回替换次数,

  字符串正则的编译:  变量名 = compile编()字符串编译

           变量.search()寻找: 反复使用字符串编译出来的正则表达式   

  finditer():

      得到迭代器,for循环也是得到迭代器,需要.group才能拿到结果

  findeall的取消优先级,(?:...)

  split :分割如果有分组则会保留分割内容

    

 

猜你喜欢

转载自www.cnblogs.com/aikang525/p/10540020.html