day 14 三元运算符,列表字典推导式,递归,匿名函数

一、三元运算符

就是if.....else..... 语法糖
前提:if和else只有一条语句

  

#原始版
cmd=input('cmd')
if cmd.isdigit():
    print('1')
else:
    print('2')


简化版:
cmd=input('cmd')
print('1') if cmd.isdigit() else print('2')




#求两个数的最大值
a=20
b=30
res=a if a>b else b
print(res)

  二 、推导式

#列表推导式
dic={'a':1,'b':2,'c':3}
res=[(k,v) for k,v in dic.items()]
print(res)
#[('a',1),('b',2),('c',3)]


#元组推导式
res=((k,v) for k,v in dic.items())
print(tuple(res))


#字典推导式
ls=[('a',1),('b',2),('c',3)]
res={k:v for k,v in ls}
print(res)
#{'a':1,'b':2,'c':3}

  

#案例
#将range()推导为列表
res_ls=[arg for arg in range(10)]
print(res_ls)
#[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

#将range()推导为字典
res_dic={'a';arg for arg in range(10)}
print(res_dic)
#{‘a’:9}            #key值具有唯一性,所以只生产最后一个key值

res_dic={arg:1 for arg in range(10)}
print(res_dic,type(res_dic))
#{0: 1, 1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1, 7: 1, 8: 1, 9: 1} <class 'dict'>
#在此,需要纠正一下,key值不一定是字符串,存在字符串是用来对value起描述作用


#迭代出可解压为的单列容器可以推导出字典
res-dic={v:k for k,v in enumerate('abc')}
print(res)
#{'a': 0, 'b': 1, 'c': 2}
案列

三、递归

前提:
回溯到一个有具体结果的值,开始递推
回溯与递归的条件要有规律

递归的本质:函数的自我调用

import sys
sys.setrecursionlimit(200) #手动设置递归深度
print(sys.getrecursionlimit())  #默认1000

  

# 询问第一个人年龄,回溯条件 小两岁,第五个人说出自己的年龄,推导出第一个人年龄
# 条件:下一个人的年龄比这个人年纪大两岁
def age(num):
    if num==1return 58
    temp=age(num-1)-2
    return temp
res=age(5)
print(res)


#求一个数的阶乘
def factorial(num):
    if num==1:
        return 1
    temp=num*factorial(num-1)
    return temp
res=factorial(5)
print(res)
#120
递归案例

四、匿名函数

匿名函数:没有函数名的函数
语法组成:lambda 参数列表:一个返回值表达式

没有函数名,没有函数体,只有一个返回值
关键字:lambda 
参数列表省略()
返回值return关键字也被省略

f=lambda x,y:(x+y,x-y)
print(f(10,20))

#应用场景
# 1.匿名函数函数地址可以被一个变量接受,该变量就可以作为函数名来使用,但就违背了匿名初衷
# 2.结合内置函数来使用: 内置函数某些参数需要一个函数地址,
#       -- 可以赋值一个有名函数名,也可以直接赋值匿名函数

res=max(10,20,30,40)
print(res)   #40

res=max({10,20,30,40})
print(res)    #40

  

猜你喜欢

转载自www.cnblogs.com/changwenjun-666/p/10714746.html