day13 函数剩余

上节课复习:

  1、模板

def outer(func):
    def wrapper(*args,**kwargs):
        res = func(*args,**kwargs):
        return res
    return wrapper

@outer
def index():
    pass

 

今日内容

  1、三元表达式

  2、生成式

    列表生成式

    字典生成式

    生成器表达式 ---> 自定义的迭代器

  3、函数递归

  4、匿名函数

  5、内置函数

  6、面向过程编程

三元表达式

res = 条件成立时返回的值 if 条件 else 条件不成立时返回的值

 

x = 11
y = 12
res = x if x>y else y
print(res)    # 12

 

生成式:

1)列表生成式

列表生成式语法是固定的,[]里面for 前面是对列表里面数据的运算操作,后面跟平常for循序一样遍历去读取。运行后会自动生成新的列表

l = []
for i in range(10):
    l.append(i)
print(l)  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

res = [x for x in range(10)]
print(res)  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

# 案例一:
res = [x for x in range(10) if x > 5]
print(res)

# 案例二:
names = ['lxx','hxx','wxx','lili']
res = [ name+'sb'  for name in names]
print(res)  #   ['lxxsb', 'hxxsb', 'wxxsb', 'lilisb']

# 案例三:
names = ['egon','lxx_sb','hxx_sb','wxx_sb']
res = [name for name in names if name.endswith('sb')]
print(res)  # ['lxx_sb', 'hxx_sb', 'wxx_sb']

 

2)字典生成式

res = {i:i**2 for i in range(5)}
print(res)  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

items = [('k1',111),('k2',222),('k3',333)]
print(dict(items))  # {'k1': 111, 'k2': 222, 'k3': 333}
print({k:v for k,v in items})  # print({k:v for k,v in items})  #

 

3)集合生成式

res = {i for i in range(5)}
print(res)

 

4)生成器表达式

res = (i for i in range(3))
print(next(res))
print(next(res))
print(next(res))

 

函数递归

在调用一个函数的内部又调用自己,所以递归调用的本质就是一个循环的过程

大前提:递归调用一定要在某一层结束

递归的两个阶段:

1、回溯:向下一层一层挖井

2、递推:向上一层一层返回

items=[[1,2],3,[4,[5,[6,7]]]]
def func(items):
    for x in items:
        if type(x) is list:  # 满足未遍历完items以及if判断成立的条件时,一直进行调用
            func(x)
        else:
            print(x,end=' ')
func(items)

 

二分法:

func_int = 9
num = [-3,-2,0,55,66,77,88,99,101]
def find(num,find_num):
    print(num)
    if len(num) == 0:
        print('not exists')
        return
    res = len(num) // 2  # 4
    msg = num[res]  # 66
    if func_int > msg:
        find(num[res+1:],find_num)
        pass
    elif func_int < msg:
        find(num[:res],find_num)
    else:
        print('fund_int')
find(num,func_int)

 

匿名函数:没有名字的函数

特定:临时用一次

salariex = {
    'egon':3000,
    'tom':100000,
    'zxx':100
}

print(max(salariex,key= lambda key:salariex[key]))   # tom
print(min(salariex,key= lambda key:salariex[key]))   # zxx
# 默认从小到大
print(sorted(salariex,key= lambda key:salariex[key]))  # ['zxx', 'egon', 'tom']
# 从大到小
print(sorted(salariex,key= lambda key:salariex[key],reverse=True))  # ['tom', 'egon', 'zxx']

 

了解:

# map
names = ['lxx','hxx','lili']
l = [name + 'sb' for name in names]

res = map(lambda name:name+'sb',names)
print(list(res))
# print(res.__next__())

# filter
names = ['lxx_sb','hxx','lili_sb','egon']
res = [name for name in names if name.endswith('sb')]
print(res)  # ['lxx_sb', 'lili_sb']

res = filter(lambda name:name.enfswith('sb'),names)
print(list(res))

# reduce
from functools import reduce
res = reduce(lambda x,y:x+y,[1,2,3])
print(res)  # 6

 

面向过程编程

面向过程编程:

  核心是“过程”二字,过程就是解决问题的步骤,即先干啥,再干啥,后干啥

  所以基于该思想编写程序就好比设计一条一条的流水线

  优点:复杂的问题流程化,进而就简单化

  缺点:牵一发而动全身、扩展性差

 

上一篇:机器学习day13非监督学习


下一篇:Java Day13