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

一、三元表达式

表达式一  if条件  表达式二

name=input('姓名>>: ')
res='SB' if name == 'alex' else 'NB'
print(res)

二 生成器表达式

#2、示例:生一筐鸡蛋变成给你一只老母鸡,用的时候就下蛋,这也是生成器的特性
>>> chicken=('鸡蛋%s' %i for i in range(5))
>>> chicken
<generator object <genexpr> at 0x10143f200>
>>> next(chicken)
'鸡蛋0'
>>> list(chicken) #因chicken可迭代,因而可以转成列表
['鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4',]

#3、优点:省内存,一次只产生一个值在内存中

二、递归与二分法

递归的定义

#递归调用是函数嵌套调用的一种特殊形式,函数在调用时,直接或间接调用了自身,就是递归调用

递归调用应该分为两个明确的阶段:递推,回溯

1、递归调用应该包含两个明确的阶段:回溯,递推
  回溯就是从外向里一层一层递归调用下去,
      回溯阶段必须要有一个明确地结束条件,每进入下一次递归时,问题的规模都应该有所减少(否则,单纯地重复调用自身是毫无意义的)

  递推就是从里向外一层一层结束递归

2、二分法

l=[1,2,10,30,33,99,101,200,301,402]

def search(num,l,start=0,stop=len(l)-1):
  if start <= stop:
      mid=start+(stop-start)//2
      print('start:[%s] stop:[%s] mid:[%s] mid_val:[%s]' %(start,stop,mid,l[mid]))
      if num > l[mid]:
          start=mid+1
      elif num < l[mid]:
          stop=mid-1
      else:
          print('find it',mid)
          return
      search(num,l,start,stop)
  else: #如果stop > start则意味着列表实际上已经全部切完,即切为空
      print('not exists')
      return

search(301,l)

3、匿名函数

匿名就是没有名字
def func(x,y,z=1):
  return x+y+z
#有名函数与匿名函数的对比
有名函数:循环使用,保存了名字,通过名字就可以重复引用函数功能

匿名函数:一次性使用,随时随时定义

应用:max,min,sorted,map,reduce,filter
每天逼着自己写点东西,终有一天会为自己的变化感动的。这是一个潜移默化的过程,每天坚持编编故事,自己不知不觉就会拥有故事人物的特质的。 Explicit is better than implicit.(清楚优于含糊)
原文地址:https://www.cnblogs.com/kylin5201314/p/13509376.html