函数的小知识
函数的递归
函数在调用阶段直接或间接调用自身
#直接调用 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))