码迷,mamicode.com
首页 > 其他好文 > 详细

函数拓展及表达式

时间:2019-07-14 14:41:24      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:参数   方式   否则   with   middle   自己   逆转   取出   bool   

一.函数的递归

递归(recursion):在函数内部自己调用自己。

递归分为两个阶段:回溯和递推。

 

回溯:回溯一次,问题的复杂度就会进一步降低,直到终止条件成立,结束。

递推:从终止条件成立时,一次次的往回推导

技术图片
l = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,]]]]]]]]]]]]]

def get_num(l):
    for i in l:
        if type(i) is int:
            print(i)
        else:
            get_num(i)

get_num(l)
View Code

 

pycharm导入import sys模块,通过sys.getrecursionlimit()方法,知道递归的层数默认值为1000,但是实际上只有997(从0开始)。

可以通过sys.setrecursionlimit()方法,指定递归层数。

 

两种代替代码块的方式:

  第一种顶替方式 pass (推荐使用pass)
  第二种顶替方式 ... 

二.二分法

应用场景:在一个有序的容器内查找某个值

查找方法:每次查找都从中间开始进行比较。

技术图片
l = [1,2,3,4,5,6,7,8,9,10]
count =0
target= 5
def find_two (li,target) :
    global count
    print(count)
    print(li)
    count += 1
    print(len(li)//2)
    middle = len(li) //2

    if target < li[middle] :
        left = li [0:middle]
        find_two(left,target)
    elif target < li[middle] :
        right = li [middle+1:]
        print(right)
        find_two(right, target)
    elif li[middle] == target:
        print("find",count)

find_two(l,target)
View Code

 

三.三元表达式

a if a > b  else b

如果if后面的条件 成立返回前面的值,否则返回else后面的值

应用场景:在只有两种情况的条件下

四.生成式

1.列表生成式

 格式:[变量名 for 变量名  in 容器类型 if 判断条件]

技术图片
l = [tank,nick,oscar,sean]

res = ["%s_rich" %i for i in l if i.endswith(k)]
print(res)
View Code

 

2.字典生成式

  格式:{key: value for key: value  in 容器类型 if 判断条件}

技术图片
l1 = [jason,18,dbj]
res= {i:j for i,j in enumerate(l1) if j != 18}
print(res)
View Code

 

3.集合生成式

 格式:{变量名 for 变量名  in 容器类型 if 判断条件}

print({i for i in range(10) if i != 9})

 

4.生成器表达式

 格式:(变量名 for 变量名  in 容器类型 if 判断条件)

 

五.匿名函数简介

匿名函数:没有名字的函数,只能临时使用一次,用完地址就销毁。

 lamba 函数参数 : 函数返回值

max(dic,key=lambda k:dic[k])

ps :匿名函数通常会配合其他函数使用。

六.常用内置函数

map(func, *iterables)映射函数

技术图片
l = [1,2,3,4,5]

print(list(map(lambda y:y+10,l)))  #  容器类型的每一个元素调用前面的函数,并把返回值生成一个新的列表。
View Code

zip([iterable, ...]) 压缩函数

技术图片
l1 = [1,2,]
l2 = [jason,egon,tank]
l3 = [a,b,c]
zipper = list(zip(l1,l2,l3)) 
# 可以把多了容器类型中的对应的元素,以元祖的形式储存在列表中。返回值是个地址
#列表的长度取决于,容器类型中最短的那个。可以用list把zip对象转换成列表
print(zipper)
print(list(zip(*zipper)))
#可以用*把zip过程逆转
View Code

filter(function, iterable) 过滤函数

技术图片
l = [1,2,3,4,5,6]
print(list(filter(lambda y:y != 10,l)))
# 通过条件过滤掉不想要的元素,然后生成一个新的列表
View Code

sorted(iterable, reverse = bool ):

技术图片
l = [1,2,3,4,5,6]

print(sorted(l,reverse=True)) #降序
print(sorted(l,reverse=False)) #升序
View Code

reduce(function, iterable, initia=None)

使用reduce函数需要from functools import reduce 导入函数

技术图片
from functools import reduce
l = [1,2,3,4,5,6]
print(reduce(lambda x,y:x+y,l,19))
#匿名函数获取容器中的前两个值,如果容器非空的话就把初始值放在容器中的第一个
#然后再取出后面一个值,与和相加,直到拿到所有;列表加默认值之he。
View Code

 

函数拓展及表达式

标签:参数   方式   否则   with   middle   自己   逆转   取出   bool   

原文地址:https://www.cnblogs.com/Cpsyche/p/11184105.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!