函数之三元表达式,递归,匿名函数,内置函数

三元表达式

条件成立会返回一个值,不成立会返回一个值

def  func(x,y):
      if  x>y:
           return  x
      else:
           return  y

res=x  if x > y   else  y   #三元表达式
print(res)

列表推导式,生成器表达式

 

#  列表推导式
egg_list=[] for i in range(10): egg_list.append('鸡蛋%s' %i) egg_list=['鸡蛋%s' %i for i in range(10)]

 

# 将列表推导式的 [ ]  换成  () 就是生成器表达式

 

列表推倒式比较直观、占内存

生成器表达式不容易看出内容,省内存

[变量(加工的变量)for 变量i  in   可迭代的数据类型] 列表推导式  # 循环模式

[变量(加工后的数据)for  变量i  in   可迭代的数据类型  if  条件] 列表的推导式  # 筛选模式

递归

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

递归分为两个阶段

1、回溯(一定要在满足某种条件下,结束回溯,否则会无限递归)

2、递推

def salary(n):
    if n == 1:
        return 100
    return salary(n-1)+300
print(salary(5))

# salary(5)=salary(4)+300
# salary(4)=salary(3)+300
# salary(3)=salary(2)+300
# salary(2)=salary(1)+300
# salary(1)=100                      # 回溯

# salary(n)=salary(n-1)+300     n>1
# salary(1) =100                n=1             #  递推

总结:

  1、递归一定要有一个明确的结束条件

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

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

  4、递归效率不高,递归层次过多会导致栈溢出

匿名函数(不会单独使用)

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

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

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

# f =lambda x,n:x ** n
# print(f(3,3))
# 因为匿名函数最重要的一点就是没有名字,所以这种赋值是没有意义的

def   func(x,y,z)
       return   x+y+z
lambda  x,y,z: x+y+z     #匿名函数

匿名函数与有名函数的对比

有名函数:循环使用,保存了名字,通过名字就可以重复引用函数功能

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

lambda 匿名函数的应用

# map  映射
names=['alex','wxx','yuanhao','egon']
res=map(lambda x:x+'_nb'if x=='egon'else x+'_sb',names)
print(list(res))

# reduce
from functools import reduce
l=['my','name','is','alex']
res = reduce(lambda x,y:x+' '+y,l)
print(res)
 
# filter  过滤,成功 True,否则 False
# names=['alex_sb','wxx_sb','egon']
# res=filter(lambda x:x.endswith('_sb'),names)
# print(list(res))

内置函数

 

# print(abs(-1))
# print(all([1,'a',True])) # 列表中所有元素的布尔值为真,最终结果才为真
# print(all('')) # 传给all的可迭代对象如果为空,最终结果为真

# print(any([0,'',None,False])) #列表中所有元素的布尔值只要有一个为真,最终结果就为真
# print(any([])) # 传给any的可迭代对象如果为空,最终结果为假

# print(bin(11)) #十进制转二进制
# print(oct(11)) #十进制转八进制
# print(hex(11)) #十进制转十六进制

# print(bool(0)) #0,None,空的布尔值为假

# res='你好egon'.encode('utf-8') # unicode按照utf-8进行编码,得到的结果为bytes类型
# res=bytes('你好egon',encoding='utf-8') # 同上
# print(res)

# def func():
#     pass
# print(callable('aaaa'.strip)) #判断某个对象是否是可以调用的,可调用指的是可以加括号执行某个功能

# print(chr(90)) #按照ascii码表将十进制数字转成字符
# print(ord('Z')) #按照ascii码表将字符转成十进制数字


# print(dir('abc')) # 查看某个对象下可以用通过点调用到哪些方法

# print(divmod(1311,25)) # 1311 25

# 将字符内的表达式拿出运行一下,并拿到该表达式的执行结果
# res=eval('2*3')
# res=eval('[1,2,3,4]')
# res=eval('{"name":"egon","age":18}')
# print(res,type(res))
部分内置函数用法

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值