函数-----三元表达式,函数递归,匿名函数,列表生成式,生成器表达式

三元表达式:

1.我们常用的

def max2(x,y)

        if x> y:

              return x

       else:

              return y

res=max2(10,11)

print(res)

2.三元表达式

x=10

y=11

res=x  if  x>y  else  y

print(res)

三元表达式仅应用于:

1.条件成立返回一个值

2.条件不成立返回一个值

def max2(x,y)

       return x  if  x> y  else  y

print(max2(10,11))

 

 

函数递归

函数的递归调用,在函数调用的过程中,又直接或间接的调用了函数的本身

直接调用:

def foo()

       print('from foo')

       foo()

foo()

间接调用:

def bar():

      print('from bar')

      foo()

def foo():

      print('form foo')

      bar()

foo()

 

递归分为两个阶段:

1.回溯:一定要满足某种条件结束回溯,否则无限递归

2.递推

def age(n):

        if n==1:

              return  18

         return age(n-1)+2

print(age(5))

总结:1.递归一定要有一个明确的结束条件

2:每进入下一次递归,问题的规模都应该减少

3.在python中没有尾递归优化

 

 

匿名函数:没有名字,用一次丢一次,不会单独使用

f=lambda x,n:x**n

print(f(2,3))

强调:

1.匿名的目的就是要没有名字,给匿名函数赋给一个名字是没有意义的

2.匿名函数的参数规则、作用域关系与有名函数是一样的

3.匿名函数的函数体通常应该是一个表达式,该表达式必须要有一个返回值

lambda x,y,z: x+y+z

 

lambda匿名函数的应用:

max  min  sorted  

salaries={
'egon':3000,
'alex':1000000,
'wupeiqi':10000,
'yuanhao':2000
}

求工资最高的那个人是谁

print(max(salaries.key=lambda x:salaries[x]))

求工资最低的那个人是谁

print(min(salaries.key=lambda x:salaries[x]))

 

把薪资字典,按照薪资的高低排序

nums=[1,4,20,11]

nums=sorted(nums)     #默认是升序

print(nums)

 

lambda与map  filter  reduce

nums=[1,2,3,4,5,6]

res=map(lambda x:x**2,nums)

print(list(res))

 

names=['alex','egon']

res=map(lambda x:x+'_NB',names)

print(list(res)

 

from functools import reduce

res=reduce(lambda x,y:x+y,range(1,101),112)

res=reduce(lambda x,y:x+y,range(1,101)

print(res)

 

filter

ages=[18,119,29,45,1]

res=filter(lambda n:n>=30,ages)

print(list(res))

 

 

列表生成式:用于数据量少

l=[]

for i in range(100):

      l.append('egg%s' %i)

print(1)    # 常规的方法

l=['egg%s' %i for i in range(100)]  #列表生成式

l=['egg%s' %i for i in range(100) if i>10]   #列表生成式升级版,加判断

print(l)


生成器表达式:用于数据量较大

l=('egg%s' %i for i in range(100) if >10)
print(next(l))

 

转载于:https://www.cnblogs.com/gaobei/articles/8696546.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值