函数(五)二分法与匿名函数

二分法

#递归实现二分查找 li是列表   item是要查找的元素
def merge_search( li ,item ):
    #传来的列表每次都是新生成的,如果发现里面没有元素,则是查找到尽头都没找到
    if not li :
        return False

    mid = len(li)//2   #mid记录li的中间位置
    #检查一下 如果中间这个数就是要找的元素 返回真
    if li[mid] == item :
        return True
    # 如果mid比item大,说明item可能会出现在mid左边,对左边再查找
    elif li[mid]> item :
        return merge_search( li[:mid] ,item )
    # mid 比item小,说明item有可能在mid右边,对右边再查找
    else :
        return merge_search( li[mid+1:] , item )

if __name__ == '__main__':
    li = [1,2,3,4,5,6,7]
    print( merge_search(li , 0) )   #False
    print( merge_search(li , 1) )   #True

匿名函数

匿名函数,他没有绑定名字,使用一次即被收回,加括号既可以运行。

lambda关键字

# 普通python函数
def func(a, b, c):
    return a + b + c
    
print(func(1, 2, 3))
# 返回值为6


# lambda匿名函数
f = lambda a, b, c: a + b + c

print(f(1, 2, 3))
# 返回结果为6

冒号:之前的a,b,c表示它们是这个函数的参数。

匿名函数不需要return来返回值,表达式本身结果就是返回值。

lambda 只是一个表达式,函数体比 def 简单很多。

lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。

匿名函数优点

使用Python写一些脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。

对于一些抽象的,不会被别的地方再重复使用的函数,有时候函数起个名字也是个难题,使用lambda不需要考虑命名的问题

使用lambda在某些时候然后代码更容易理解

内置函数

面向过程编程

面向过程:核心是过程二字,过程即解决问题的步骤,基于面向过程去设计程序就像是在设计,流水线式的编程思想,在设计程序时,需要把整个流程设计出来, 一条工业流水线,是一种机械式的思维方式

优缺点

优点:程序体系结构清晰,可以把复杂的问题简单化,流程化

缺点:可扩展性差,一条流线只是用来解决一个问题,所以说面向过程的应用多为不需要经常变化的软件

原文地址:https://www.cnblogs.com/einsam/p/10980574.html