三元表达式:

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))

 

posted on 2018-04-02 19:39  muzinianhua  阅读(70)  评论(0编辑  收藏  举报