zoukankan      html  css  js  c++  java
  • 内置函数、递归函数和匿名函数

    1、python--------------内置函数

    复制代码
    内置函数操作
    1 #!usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # 1.locals()和globals() 4 # def func(): 5 # x=1 6 # y=2 7 # print(locals()) 8 # print(globals()) 9 # func() 10 11 # 2.eval,exec,和compile 12 # print(123) 13 # "print(456)"#字符串 14 # eval("print(456)")#吧字符串转换成python代码去执行(有返回值) 15 # exec("print(7889)")#吧字符串转换成python代码去执行(无返回值) 16 # num = eval('4+5+6')#执行了,有返回值 17 # print(num) 18 # 19 # num = exec('4+5+6')#执行了,没有返回值 20 # print(num) 21 # compile#做编译 22 # com=compile('1+2+3','',mode = 'eval')#节省时间 23 # print(eval(com)) 24 # print(eval('1+2+3'))#这句效果和上面的compile()效果一样 25 26 27 # 3.print 28 # print('123',end='')#不换行 29 # print('456',end='') 30 31 # print(1,2,3) 32 # print(1,2,3,4,5,6,sep=',') 33 34 35 36 # print()函数的小例子 37 # import time 38 # import sys 39 # for i in range(0,101,2): 40 # time.sleep(0.1) 41 # char_num = i//2 #打印多少个# 42 # per_str = '%s%% : %s ' % (i, '*' * char_num) if i == 100 else ' %s%% : %s'%(i,'*'*char_num) 43 # print(per_str,end='', file=sys.stdout, flush=True) 44 45 # import sys 46 # for i in range(0, 101, 2): 47 # time.sleep(0.1) 48 # char_num = i // 2 49 # per_str = ' %s%% : %s' % (i, '*' * char_num) 50 # print(per_str, file=sys.stdout, flush=True) 51 52 # 4.input() 53 # 5.type() 54 # 6.hash 55 # print(hash('asdsffd'))#一开始几个都是不变的,,然后重新运行一次就变了 56 # print(hash('asdsffd')) 57 # print(hash('asdsffd')) 58 # print(hash('asdsffd')) 59 # print(hash('asdsffd')) 60 # print(hash((1,2,3,4))) 61 62 # 7.open 63 # r,w,a,r+,w+,a+(都可以加b) 64 # f=open('tmp','r+')#r+打开文件 65 # print(f.read(3))#如果读了在写,追加 66 # f.seek(5)#如果seek指定了光标的位置,就从该位置开始覆盖这写 67 # f.write('aaaaaa')#如果直接写,从头覆盖 68 # f.close() 69 70 71 # 8.__import__() 72 # import os 73 # import sys 74 # import time 75 76 # 9.callable:查看能不能调用 77 # print(callable(123))#数字不能调用结果就是False 78 # print(callable(open))#函数可以调用就返回True 79 80 # 10.dir 查看数据类型的方法 81 # print(dir(__builtins__))#看着报错,,但其实不报错 82 # print(dir(int)) 83 # print(dir(list)) 84 # print(dir(0))#和int一样 85 # print(set(dir(list))-set(dir(tuple))) 86 # 11. 87 # num1=int(123) 88 # num2=int(12.3)#强制转换成int类型 89 # print(num1,num2) 90 # 12.取商/余 91 # print(divmod(7,3)) 92 # 13.计算最小值 93 # print(min(1,2,3,4)) 94 # print(min([5,6])) 95 # 13.计算最大值 96 # print(max(1,2,3,4)) 97 # print(max([5,6])) 98 99 # 14.sum求和 100 # print(sum(1,2,3,4))#出错了,参数是序列,散列不行 101 # print(sum([5,6])) 102 # print(sum((1,2,3,4))) 103 104 # 以下的两个方式是一样的 105 # print(1+2) 106 # print(int(1).__add__(2)) 107 108 # 15.round精确度 109 # print(round(3.1415926,2))#保留两位 110 111 112 # 16.pow()幂运算 113 # print(pow(2,3)) 114 # print(2**3) 115 116 117 # 17.和数据结构相关的 118 # 1.reversed()顺序的反转 119 # l=[1,2,3,4] 120 # print(list(reversed(l)))#是生成了一个新的列表,没有改变原来的列表(以后能不用reversed就不用reversed,用reverse) 121 # 122 # # l.reverse()#在现在的列表的基础上修改了,修改的是原来的列表 123 # print(l) 124 125 # 2.slice切片 126 # 3.format()#除了格式化以外 127 # print(format('test','<20')) 128 # print(format('test','>40')) 129 # print(format('test','^40')) 130 131 # 4.bytes 132 s='你好' 133 # sb=bytes(s,encoding='utf-8') 134 # print(sb) 135 # print(sb.decode('utf-8')) 136 137 # sb2=bytearray(s,encoding='utf-8') 138 # sb2[0]=229 #修改 了解就好 139 # print(sb2.decode('utf-8')) 140 # print(sb2) 141 # print(sb2[0]) 142 143 # 5.repr 144 # print(repr('1234')) 145 # print(repr(1234)) 146 # print('name:%r'%('egon'))#你怎么传进去的就按什么格式打印出来了 147 148 # 6.set和frozenset(不可变的集合)就像list和tuple 149 150 # 7.enumerate 151 # l=['a','b'] 152 # for i in enumerate(l): 153 # print(i) 154 # 155 # for i ,j in enumerate(l): 156 # print(i,j) 157 158 # 8.all和any 159 # print(all([1,2,3])) 160 # print(all([0,2,3]))#因为0是False 161 # 162 # print(any([1,2,3])) 163 # print(any([0,2,3])) 164 165 # 9.zip() 166 # l=[1,2,3] 167 # l2=[4,5,6,7,8] 168 # print(zip(l,l2)) 169 # print(list(zip(l,l2))) 170 # l3={'k':'v'} 171 # print(list(zip(l,l3))) 172 173 # 10.sort和sorted 174 # l=[1,3,5,-2,-6] 175 # l.sort() 176 # print(l) 177 # l2=[1,3,5,-2,-6] 178 # print(sorted(l2)) 179 # print(sorted(l2,key=abs)) 180 # print(sorted(l2,key=abs,reverse=True))#默认从小到大排序,修改为True,则从大到小排序 181 182 183 # 11.map():我要对我的列表当中的每一个值去做函数里面的操作 184 # l=[1,2,3,4,5] 185 # def pow2(x): 186 # return x*x 187 # print(list(map(pow2,l))) 188 189 190 # 12.filter():从一个列表当中找到所有符合筛选条件的,在组成一个新列表 191 # def aaa(x): 192 # return x%2==1 193 # ret=list(filter(aaa,[1,2,54,3,6,8,17,9])) 194 # print(ret)
    复制代码

    https://www.processon.com/ 具体分类见此网站

    2、python---------------递归函数

    一、递归的定义

    1.什么是递归:在一个函数里在调用这个函数本身

    2.最大递归层数做了一个限制:997,但是也可以自己限制

    1 def  foo():
    2     print(n)
    3     n+=1
    4     foo(n)
    5 foo(1)
    验证997

    3.最大层数限制是python默认的,可以做修改,但是不建议你修改。(因为如果用997层递归都没有解决的问题要么是不适合使用递归来解决问题,要么就是你的代码太烂了)

    1 import sys
    2 sys.setrecursionlimit(10000000)#修改递归层数
    3 n=0
    4 def f():
    5     global n
    6     n+=1
    7     print(n)
    8     f()
    9 f()
    View Code

    我们可以通过以上代码,导入sys模块的方式来修改递归的最大深度。

    sys模块:所有和python相关的设置和方法

    4.结束递归的标志:return

    5.递归解决的问题就是通过参数,来控制每一次调用缩小计算的规模

    6.使用场景:数据的规模在减少,但是解决问题的思路没有改变

    7.很多排序算法会用到递归

    二、递归小应用

    1.下面我们来猜一下小明的年龄

    小明是新来的同学,丽丽问他多少岁了。

    他说:我不告诉你,但是我比滔滔大两岁。

    滔滔说:我也不告诉你,我比晓晓大两岁

    晓晓说:我也不告诉你,我比小星大两岁

    小星也没有告诉他说:我比小华大两岁

    最后小华说,我告诉你,我今年18岁了

    这个怎么办呢?当然,有人会说,这个很简单啊,知道小华的,就会知道小星的,知道小星的就会知道晓晓的,以此类推,就会知道小明的年龄啦。这个过程已经非常接近递归的思想了。

    小华 18+2
    小星 20+2
    晓晓   22+2
    滔滔   24+2
    小明  26+2

    上面的图我们可以用个序号来表示吧

    age(5) = age(4)+2
    age(4) = age(3) + 2 
    age(3) = age(2) + 2
    age(2) = age(1) + 2
    age(1) = 18

    那么代码该怎么写呢?

    1 def age(n):
    2     if n == 1:
    3         return 18
    4     else:
    5         return age(n - 1) + 2
    6 
    7 ret=age(6)
    8 print(ret)
    View Code

    2.一个数,除2直到不能整除2

    1 def  cal(num):
    2         if  num%2==0:#先判断能不能整除
    3             num=num//2
    4             return cal(num)
    5         else:
    6             return num
    7 print(cal(8))
    一个数,除2直到不能整除2

    3.如果一个数可以整除2,就整除,不能整除就*3+1

    1 def func(num):
     2     print(num)
     3     if num==1:
     4         return
     5     if num%2==0:
     6         num=num//2
     7     else:
     8         num=num*3+1
     9     func(num)
    10 func(5)
    如果一个数可以整除2,就整除,不能整除就*3+1

    三、三级菜单

    menu = {
    '北京': {
    '海淀': {
    '五道口': {
    'soho': {},
    '网易': {},
    'google': {}
    },
    '中关村': {
    '爱奇艺': {},
    '汽车之家': {},
    'youku': {},
    },
    '上地': {
    '百度': {},
    },
    },
    '昌平': {
    '沙河': {
    '老男孩': {},
    '北航': {},
    },
    '天通苑': {},
    '回龙观': {},
    },
    '朝阳': {},
    '东城': {},
    },
    '上海': {
    '闵行': {
    "人民广场": {
    '炸鸡店': {}
    }
    },
    '闸北': {
    '火车战': {
    '携程': {}
    }
    },
    '浦东': {},
    },
    '山东': {},
    }
     1 def threeLM(menu):
     2     while True:
     3         for key in menu:#循环字典的key,打印出北京,上海,山东
     4             print(key)
     5         name=input('>>>:').strip()
     6         if name=='back' or name=='quit':#如果输入back,就返回上一层。如果输入quit就退出
     7             return name #返回的name的给了ret
     8         if name in menu:
     9             ret=threeLM(menu[name])
    10             if ret=='quit':return 'quit'#如果返回的是quit,就直接return quit 了,就退出了
    11 threeLM()
    12 # print(threeLM(menu))#print打印了就返回出quit了,threeLM()没有打印就直接退出了
    三级菜单

    四、二分查找算法 

    从这个列表中找到55的位置l = 【2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88】

     

    这就是二分查找,从上面的列表中可以观察到,这个列表是从小到大依次递增的有序列表。

    按照上面的图就可以实现查找了。

    简单的二分法
    升级版二分法

    一、匿名函数:也叫lambda表达式

    1.匿名函数的核心:一些简单的需要用函数去解决的问题,匿名函数的函数体只有一行

    2.参数可以有多个,用逗号隔开

    3.返回值和正常的函数一样可以是任意的数据类型

    二、匿名函数练习

    复制代码
    1 请把下面的函数转换成匿名函数
    2 def  add(x,y)
    3         return x+y
    4 add()
    5 
    结果: 6 sum1=lambda x,y:x+y 7 print(sum1(5,8))
    复制代码
    1 dic = {'k1':50,'k2':80,'k3':90}
    2 # func= lambda k:dic[k]
    3 # print(max(dic,key=func))
    4 print(max(dic,key = lambda k:dic[k]))#上面两句就相当于下面一句
    比两个数的大小
    1 3.map方法
    2 l=[1,2,3,4]
    3 # def func(x):
    4 #     return x*x
    5 # print(list(map(func,l)))
    6 
    7 print(list(map(lambda x:x*x,l)))
    map方法的应用
    1 l=[15,24,31,14]
    2 # def func(x):
    3 #         return x>20
    4 # print(list(filter(func,l)))
    5 
    6 print(list(filter(lambda x:x>20,l)))
    filter函数的小应用
     1 # 方法一
     2 t1=(('a'),('b'))
     3 t2=(('c'),('d'))
     4 # print(list(zip(t1,t2)))
     5 print(list(map(lambda t:{t[0],t[1]},zip(t1,t2))))
     6 
     7 # 方法二
     8 print(list([{i,j} for i,j in zip(t1,t2)]))
     9 
    10 #方法三
    11 func = lambda t1,t2:[{i,j} for i,j in zip(t1,t2)]
    12 ret = func(t1,t2)
    13 print(ret)
    5.现有两个元组(('a'),('b')),(('c'),('d')), 请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]

    三、列表推导式

    1 6.30以内所有被3整除的数
    2 print(list([i for i in range(30) if i%3==0]))
    30以内能被3整除的数

    三、字典推倒式

    例一:将一个字典的key和value对调

    1 mcase = {'a': 10, 'b': 34}
    2 res1 = {i:mcase[i] for i in mcase}
    3 res={mcase[i]:i for i in mcase }
    4 print(res1)
    5 print(res)
    View Code

    例二:合并大小写对应的value值,将k统一成小写

    1 mcase = {'a':10,'b':34,'A':7}
    2 res = {i.lower():mcase.get(i.lower(),0)+mcase.get(i.upper(),0) for i in mcase}
    3 print(res)
    View Code

    四、集合推倒式

    例:计算列表中每个值的平方,自带去重功能

    1 l=[5,-5,1,2,5]
    2 print({i**2 for i in l})
    View Code
  • 相关阅读:
    快速排序算法
    冒泡排序
    正则表达式
    博客园 自定义 个性主题优化 这是我迄今为止用过的最好的模板 silence
    Python 中 如何复制图片?如何更改图片存储路径? 在遇无数坑后的最全解答 百试百灵
    作业test
    day69
    day68
    day67
    day67test
  • 原文地址:https://www.cnblogs.com/mqhpy/p/10976576.html
Copyright © 2011-2022 走看看