三元表达式/列表生成式/生成器表达式/匿名函数/内置函数/函数递归

一、三元表达式

三元表达式是python提供的一种简化代码解决方案。

语法:

  res =  成立返回的值 if 条件判断 else 不成立返回电热值

def func1(x,y):
    return x if x > y else y
func1(11,12)

二、列表生成式

列表生成式是python提供的一种简化代码解决方案,用来快速生成列表。

语法:

list = [ line for line in 可迭代对象 ]

list = [值 for 可迭代对象中取出的每一个值 in 可迭代对象 if 判断]

list1 = [line for line in range(1,101)]
print(list1)
list = ['a','b','c']
list1 = [line + 'q' for line in list]
print(list1)   #['aq', 'bq', 'cq']

三、生成器表达式(生成式)

g = (line for line in range(1,10))
print(g)  #<generator object <genexpr> at 0x000000000263DD00>
print(next(g)) #1
print(next(g))#2

四、列表生成式VS生成器表达式

  生成器表达式 列表生成式
优点 节省内存空间 可以索引取值
缺点 取值不方便 浪费资源

 

 五、匿名函数

语法:

lambda空格:返回值

lambda : res

注意:匿名函数必须配合内置函数一起使用才有意义。

#lambda x,y:x+y
print((lambda x,y:x+y)(1,2))  #3

 

六、内置函数

python内部提供的内置方法

如:print(),len(),range(),max(),min(),map(),filter(),sorted()

print(max(10,20))
print(min(10,20))
list = [2,1,3]
print(max(list))
#比较数字最大的字母名

dict = {
    'n':100,
    'e':60,
    'm':40,
    'a':20,
    'b':10,
        }

print(max(dict))  #默认按照:key n  #字符串的比较:ASCII
print(max(dict.values()))  #按照:value 100
print(max(dict,key=lambda x: dict[x]))  #n
print(min(dict,key=lambda x: dict[x]))  #b
list = [2,1,3]
print(sorted(list))  [1, 2, 3]
print(sorted(list,reverse=True))  #[3, 2, 1]
#map映射用法  map(func,iterable)
a = ['a','b','c','d']
#需求:给list中的除了字母d,其余都加上'_nice'
res = map(lambda x: x if x == 'd' else x +'_nice', a)
print(res)  #<map object at 0x0000000002983F98>
print(list(res))    #['a_nice', 'b_nice', 'c_nice', 'd']
#reduce合并  导入 reduce(func,iterable,initial) initial是初始值,默认为None
#需求:求1-100的和
from functools import reduce
res = reduce(lambda x,y: x+y,range(1,101),0)
print(res)  #5050
#filter过滤  filter(func,iterable)
a = [1,2,3,4]
res = filter(lambda x: x > 3,a)
print(res)   #<filter object at 0x0000000002973F28>
print(list(res))   #[4]

 

七、函数递归

函数递归指的是重复直接调用或间接调用函数本身。是一种函数嵌套调用的表现形式。

直接调用:指的是在函数内部,直接调用函数本身。

间接调用:两个函数之间相互调用间接造成递归。

 

python中有递归默认深度(限制递归次数): 998,1000

ps: 每一台操作系统都会根据硬盘来设置默认递归深度。

   #获取递归深度:
         sys.getrecursionlimit()
   #设置递归深度: 
         sys.setrecursionlimit(深度值)
    #注意: 单纯的递归调用时没有任何意义的。  

 

'''
递归有意义需遵循:回溯和递推
回溯:重复执行,直到找到终止条件
递推:找到终止条件后,开始一层层往上推回来。

age(5) = age(4) + 2
age(4) = age(3) + 2
age(3) = age(2) + 2
age(2) = age(1) + 2
age(1) = 18
那么,age(5)应该是多少?

res = age(n - 1) + 2
'''
def age(n):
    if n == 1:   #终止条件
        return 18
    #这里写return才能实现递推
    return age(n - 1) +2
res = age(5)
print(res)  #26

 


 

posted @ 2019-11-14 15:01  小猪皮蛋  阅读(302)  评论(0编辑  收藏  举报