三元表达式、递归、匿名函数

三元表达式
  符合python语法的表达方式(形式,公式)
  元素,三个元素
  整体就是,由三个元素组成的表达式
  其目的是为了简化书写,既然是简化就必然有局限性,
  三元表达式只能帮你简化仅有两个分支if判断
res=True if age>=18 else False,而且这个判断不管成立与否都必须返回一个值
a=9
b=12
res=a if a>b else b
print(res)python


递归
  递归指的是递归调用,简单地就是一个函数在执行过程当中又直接或者间接的调用该函数自己
  递归时可能出现一下错误:
  RecursionError: maximum recursion depth exceeded while calling a Python object
  在调用函数时超出了最大递归深度
  python为了防止递归太多致使内存溢出,因此给递归调用加上了深度(次数)限制,默认为1000
  递归调用本质上就是在循环执行代码,与普通循环不一样的是,函数调用会产生一系列内存开销,因此就会致使内存溢出
  如此一来,则表示全部递归能干的事情循环也能干
  在使用递归时要注意:
    1.必定要在某个条件知足时结束循环调用
    2.循环调用的次数不能超过系统的限制
    3.每一次执行函数都应该使问题的规模减小,不然就是无用的循环
    4.python中没有尾递归优化机制(使得递归调用时占用的开销更小)
  在使用递归完成在遍历全部元素(不知道有几层),能够发现递归使用起来代码量更少结构更加清新
  何时该使用递归
  你不知道到底循环几回
二分查找法
  分半查找
  拆分查找
  原理:
    先将总体分为两半
    而后去除中间的元素,与你要查找的目标进行比对,若是你要找的比中间值大请走右边
    若是你要找的比中间值小请走左边
      1.先获得一个中间值,比较是否是你要找到值若是是直接返回
      2.若是不是 那就把列表拆为两半,进行比较
      3.若是你要找的比中间值大找右边
      若是你要找的比中间值小找左边函数


li = [1, 3, 5, 7, 11, 13, 17, 19, 23, 29]优化

def search(li, tage):
if not li:
return False
i = len(li) // 2
if li[i] == tage:
return True
if len(li) == 1:
return False
left = li[:i]
right = li[i:]
if tage > len(li[i]):
return search(right, tage)
else:
return search(left, tage)spa

print(search(li, 13))code


匿名函数
  匿名指的就是没有名字
    其罪明细的特色就是
    有名字的值能够屡次使用,屡次访问
    而没有名字的值,只能临时使用一次,用完就没了
  匿名函数与有名函数的区别
    关键字为lambda
    参数不须要加括号,而且支持全部类型的参数
    名称空间与做用域关系彻底相同
    函数体中不能写return,会自动将执行结果返回
    函数体只能有一个表达式并且不能执行
  匿名函数何时用
    当你的函数体只有一行表达式时而且仅使用一次时就能够做为匿名函数
    更多的是与内置函数联用(max,min,sorterd,map,filter,reduce)
    当默认的比较方式没法知足需求时就能够经过传入同一个函数来决定用什么比较
    函数能够是匿名也能够是有名的,很明显这时候匿名函数更好
max,min
salary = {
"egon":250,
"zgon":500,
"bgon":20000,
}
print(max(salary,key=lambda k:salary[k] ))
print(min(salary,key=lambda k:salary[k]))对象

def get_value(k):
return salary[k]排序

#使用有名函数完成取值
print(max(salary, key=get_value))递归

 

sorterd#排序
print(sorted(li))#从小到大排序
print(sorted(li,reverse=True))#从大到小排序
print(sorted(salary,key=lambda k:salary[k]))#获得工资从小到大排序
print(sorted(salary,key=lambda k:salary[k],reverse=True))#获得工资从大到小排序
print(res[-1],salary[res[-1]])最高工资的人即钱

map 映射,用于从一个可迭代对象中取出全部数据,进行一系列操做后再放回新列表中
def f(v):
print(v)
return v+100
res=map(f,li)
print(list(res))#li中每个加100内存

res=map(lambda v:v+100,li)
print(list(res))#li中每个加100ci

li1=['a','b','c']
res=map(lambda v:v+'.txt',li1)
print(list(res))#li1中每个的后缀加上.txt

 

filter 过滤,用于从一堆数据中过滤一些不知足条件的数据,
提供一个函数,要函数的返回值是bool类型True表示要保留,False就过滤掉
res=filter(lambda v:True if v>18 else False,li)
print(list(res))#过滤掉li中大于18的数

names = ["agon","bgon","cgon","blex","jerry"]
res=filter(lambda v:True if not v.endswith('gon') else False,names)
print(list(res))#从names中过滤掉名字结尾为gon的

reduce 合并,是把列表中的数据进行合并 每次会传给你两个值 n和n+1个
# 从functools中拿到一个reduce
from functools import reduce
li2=['a','b','c','d']
def f(a,b):
return a+b
res=reduce(f,li2)
print(res)#让li2中的元素合并

res=reduce(lambda a,b:a+b ,li2)
print(res)#让li2中的元素合并

 

abs()绝对值
all()若是全部元素都为True结果为True
any()任意一个元素为True结果为True
ascii()将参数转为asc若是asc不支持这个就转为uncode
bin()转为2进制
oct()转为8进制
hex()转为16进制
bool()转为布尔类型
bytearray()
bytes()
callable()是否可调用
chr()数字转asc字符
ord()按照asc把字符转数字
compile()把一个对象转为指定的字节码
complex()转为复数形式
dir()查看该对象中全部可用的名字函数名和变量
divmod()获得商和余数
enumerate()枚举把一个值与数字进行对应
eval()执行一个字符串类型的表达式
可用帮你把一个字符串的内容转换为pyton数据类型 可是这并非它的本职工做
foozenset()冻结一个集合
globals()查看全局名称空间中的全部名字
lobals()查看局部名称空间中的全部名字在全局位置调该函数 看到也是全局
hash()可用来校验一个数据是否是可变的
可hash是不可变的
不可hash是可变的

持续更新中

相关文章
相关标签/搜索