三元表达式、递归、二分法
一,三元表达式
1,语法格式:条件成立时要返回值 if 条件 else 条件不成立返回的值,
2,应用:
1 原代码: 2 def max2(x,y): 3 if x > y: 4 return x 5 else: 6 return y 7 8 res = max2(1,2) 9 改进后: 10 x=1 11 y=2 12 res = x if x > y else y # 三元表达式
3,列表生成式,理论上后面可以添加多个判断条件,但是不建议,因为可读性会边很差
1 原代码: 2 egg_list=[] 3 for i in range(10): 4 egg_list.append('鸡蛋%s' %i) 5 改进后: 6 egg_list=['鸡蛋%s' %i for i in range(10)]
4,字典生成器
1 l=['a','b','c'] 2 s={i:None for i in l} 3 print(s)
5,集合生成器
1 l=['a','b','c'] 2 s={i for i in l} 3 print(s,type(s))
6,生成器表达式(没有元组生成器)
1 l=['a','b','c'] 2 s=(i for i in l) 3 print(next(s)) 4 print(type(s)) 5 ************* 6 a 7 <class 'generator'>
二,递归
1,自己调用自己 1 def f1(): 2 print('from f1') 3 f1() 4 f1()

2,两个函数互相调用
1 def f1(): 2 print('from f1') 3 f2() 4 5 def f2(): 6 print('from f2') 7 f1() 8 9 f1()

3,调用停止方法,return
1 def fu1(i): 2 print("Hello") 3 i+=1 4 if i>5: 5 return 6 fu1(i) 7 fu1()
4,回溯与递推
回溯:就是打开一个个函数的过程
递推:条件满足后关闭一个个函数的过程
5,应用
1 items=[[1,2],3,[4,[5,[6,7]]]] 2 def foo(items): 3 for i in items: 4 if isinstance(i,list): #满足未遍历完items以及if判断成立的条件时,一直进行递归调用 5 foo(i) 6 else: 7 print(i,end=' ') 8 9 foo(items) #打印结果1 2 3 4 5 6 7
三,二分法
将数据一分为二,与需要查找的值进行对比,直至找到结果
四,面向过程
”面向过程“核心是“过程”二字,“过程”指的是解决问题的步骤,即先干什么再干什么......,基于面向过程开发程序就好比在设计一条流水线,是一种机械式的思维方式,这正好契合计算机的运行原理:任何程序的执行最终都需要转换成cpu的指令流水按过程调度执行,即无论采用什么语言、无论依据何种编程范式设计出的程序,最终的执行都是过程式的。
优点:复杂的问题流程化、进而简单话
缺点:扩展性非常差
场景解析:
1,不是所有软件都需要频繁迭代,比如编写脚本
2,即使一个软件需要频繁迭代,也不代表这个软件所有部分都需要迭代
五,函数式编程思想
函数式编程并非用函数编程这么简单,而是将计算机的运算视为数学意义上的运算,比起面向过程,函数式更加注重的是执行结果而非执行的过程,代表语言有:Haskell、Erlang。
函数式思想整体上是与python的思想不符的,但是部分是符合的。如lambda,map,reduce,filter。
1,匿名函数,就是没有名字的函数,
1 有名函数: 2 def fu1(x,y): 3 return x+y 4 转化为匿名函数 5 lambda x,y:x+y
应用方式:
- 方式一: 直接调用res=(lambda x,y,z:x+y+z)(1,2,3)
- 方式二: 加一个名字(一般不会用)1 func=lambda x,y,z:x+y+z # “匿名”的本质就是要没有名字,所以此处为匿名函数指定名字是没有意义的 2 res=func(1,2,3)
- 方式三:与其他函数配合(匿名函数没有名字,就相当于没有变量名的变量值,所以很容易就被回收了)
1 salaries={ 2 'siry':3000, 3 'tom':7000, 4 'lili':10000, 5 'jack':2000 6 } 7 找出最少工资的人: 8 >>> max(salaries,key=lambda k:salaries[k]) 9 'lili' 10 # 原理同上 11 >>> min(salaries,key=lambda k:salaries[k]) 12 'jack'
六,map、reduce、filter
- map,
1 array=[1,2,3,4,5] 2 3 要求一:对array的每个元素做平方处理,可以使用map函数 4 5 map函数可以接收两个参数,一个是函数,另外一个是可迭代对象,具体用法如下 6 7 >>> max(salaries,key=lambda k:salaries[k]) 8 'lili' 9 # 原理同上 10 >>> min(salaries,key=lambda k:salaries[k]) 11 'jack' 12 13 解析:map会依次迭代array,得到的值依次传给匿名函数(也可以是有名函数),而map函数得到的结果仍然是迭代器。 14 15 >>> list(res) #使用list可以依次迭代res,取得的值作为列表元素 16 [1, 4, 9, 16, 25]
- reduce,
1 reduce函数可以接收三个参数,一个是函数,第二个是可迭代对象,第三个是初始值 2 3 # reduce在python2中是内置函数,在python3中则被集成到模块functools中,需要导入才能使用 4 >>> from functools import reduce 5 >>> res=reduce(lambda x,y:x+y,array) 6 >>> res 7 15 8 解析: 9 10 1 没有初始值,reduce函数会先迭代一次array得到的值作为初始值,作为第一个值数传给x,然后继续迭代一次array得到的值作为第二个值传给y,运算的结果为3 11 12 2 将上一次reduce运算的结果作为第一个值传给x,然后迭代一次array得到的结果作为第二个值传给y,依次类推,知道迭代完array的所有元素,得到最终的结果15 13 14 也可以为reduce指定初始值 15 16 >>> res=reduce(lambda x,y:x+y,array,100) >>> res 17 115
- filter,
1 对array进行过滤操作,这就用到了filter函数,比如过滤出大于3的元素 2 3 >>> res=filter(lambda x:x>3,array) 4 解析:filter函数会依次迭代array,得到的值依次传给匿名函数,如果匿名函数的返回值为真,则过滤出该元素,而filter函数得到的结果仍然是迭代器。 5 6 >>> list(res) 7 [4, 5]
posted on 2024-02-07 00:18 我才是最帅的那个男人 阅读(10) 评论(0) 收藏 举报
浙公网安备 33010602011771号