函数的小知识

函数的递归

函数在调用阶段直接或间接调用自身

#直接调用
def func(n):
    print('from func',n)
    func(n+1)
func(1)

#间接调用
def outter():
    print('from outter')
    inner()
def inner():
    print('from inner')
    outter()
inner()

递归分为两个阶段:

1.回溯:一次次重复的过程,但是这个重复的过程必须建立在问题的复杂度越来越低的基础上,直到有一个最终的结束条件

2.递归:一次次往回推到的过程

补充知识点:

import sys
sys.getrecursionlimit()
sys.setrecursionlimit(2000)  #定义深度

二分算法:

  算法:把解决问题的效率变得更高

二分法:容器类型里面的数字必须要有大小顺序

l = [1,3,5,12,57,89,101,123,146,167,179,189,345]

l = [1,3,5,12,57,89,101,123,146,167,179,189,345]
num = 179
def get_num(l,num)
    if not l:
        print('no')
        return
    lis = len(l) // 2
    if num < l[lis]:
        l_left = l[:l[lis]]
        get_num(l_left,num)
    elif num > l[lis]:
        l_right =l[l[lis]+1:]]
        get_num(l_right,num)
    else:
        print('find it',num)        

三元表达式

  x if x > y else y

  当x的值大的时候返回x,反之返回y

三元表达式固定表达式
  值1 if 条件 else 值2
  条件成立 值1
  条件不成立 值2

三元表达式的应用场景:

goods = input('>>:')
res = 'apple' if goods == 'y' else 'banana'
print(res)

列表生成式:

l = ['yzy','yyy','ccc']
lis = ['%s_nb' for name in l ]
print(lis)
l = ['%s_nb', '%s_nb', '%s_nb','yyy']
res = [name for name in l if name.endswith('b')]
print(res)

先for循坏依次取出列表里面的每一个元素

然后交由if判断 条件成立才会交给for前面的代码

条件不成立 当前的元素直接舍弃

字典生成式:

l1 = ['yzy','123','read']
d = {k:v for k,v in enumerate(l1) if j != '123'}
print(d)

匿名函数

  1.没有名字的函数

  2.匿名函数的特点

    临时存在用完就没了

def my_sum(x,y)
    return x + y
 res = (lambda x,y:x+y)
print(res)


lambda x,y:x+y
#左边的相当于函数的形参
#右边的相当于函数的返回值
#匿名函数通常不会单独使用,是配合内置函数一起使用

常用的内置函数

max

 d = {
     'yzy':9000,
     'abb':2000,
     'yyy':10000
 }
 res = max(d,key=lambda name:d[name])
 print(res)
map 映射
l = [1,2,3,4,5]
print(list(map(lambda x:x+5,l)))
zip拉链
l1 = [1,2]
l2 = ['yzy','yyy']
print(list(zip(l1,l2)))
reduce

from functools import reduce
l = [1,2,3,4,5]
print(reduce(lambda x,y:x+y,l))

 

posted @ 2019-07-12 16:22  Yzy~Yolo  阅读(194)  评论(0编辑  收藏  举报