day13-14 内置函数

具体内容参考:http://naotu.baidu.com/file/b337aca025ccb35b746cc872265ec1a7?token=312080d5f0e65fd2

今日主要内容
1. 匿名函数
函数回顾:
def 函数名(形参):
函数体(return)

函数名(实参)

形参:
1. 位置参数
2. 默认值参数
3. 动态传参
*args: 动态接收位置参数
**kwargs: 动态接收关键字参数

位置 > *args > 默认值 > **kwargs

实参:
1. 位置参数
2. 关键字参数
3. 混合参数

lambda 参数: 返回值
   用于解决一些简单的需求, 用一行代码实现
  注意事项:1.函数的参数可以多个,多个参数之间用逗号隔开
       2.不管函数多复杂,只能写一行,且逻辑结束后直接返回数据
       3.返回值和正常函数一样, 可以是任意数据类型

2. sorted
排序 将sorted内部可迭代对象的每一个元素传递到key的参数, 根据函数运算的结果排序
sorted(Iterable, key, reverse)
3. filter
筛选 将Iterable可迭代对象的每一个元素传递给function, 根据function返回True或者False判断是否保留此项数据
filter(function, Iterable)
4. map
映射 将Iterable可迭代对象的每一个元素进行映射, 分别去执行function, 保留最后的执行结果
map(function, Iterable)
5. 递归
自己调用自己
  递归深度: python中最大的递归深度是1000 但是你永远到不了1000
    6. 二分法(递归的应用)
开头
结尾
中间
非递归二分法:
lst = [4, 56, 178, 253, 625, 1475, 2580, 3574, 15963]

n = int(input("请输入一个数字n:")) # 56

left = 0 # 左边界
right = len(lst) - 1 # 末尾的索引  右边界
while left <= right: # 当左边界大于右边界结束循环

    mid = (left + right) // 2 # 求中间的索引坐标
    if n < lst[mid]: # 判断你的数字和中间数的大小比较 .
        right = mid - 1 #  右边界往左移动
    elif n > lst[mid]:
        left = mid + 1 # 左边界往右移动
    else:
        print("找到了") # 找到了目标数字
        break
else: # 当左比右大, 循环结束. 没有找到目标数
    print("没找到")
View Code

 递归二分法1:

lst = [4, 56, 178, 253, 625, 1475, 2580, 3574, 15963]

def binary_search(lst, n, left, right):
    if left > right:
        return False
    mid = (left + right) // 2
    if n > lst[mid]:
        left = mid + 1
        # 当递归有返回值的时候. 需要写return. 否则有可能接收不到返回值
        return binary_search(lst, n, left, right)
    elif n < lst[mid]:
        right = mid - 1
        return binary_search(lst, n, left, right)
    else:
        print("找到了")
        return True

n = int(input("请输入一个数字n:")) # 178
ret = binary_search(lst, n, 0, len(lst)-1)
print(ret)
View Code

   递归二分法2:(切换列表)

切换列表
def binary_search(lst, n):
    if len(lst) == 0:
        return False
    left = 0
    right = len(lst) - 1
    mid = (left + right) // 2
    if n > lst[mid]:
        left = mid + 1
        # 当递归有返回值的时候. 需要写return. 否则有可能接收不到返回值
        return binary_search(lst[mid+1:], n)
    elif n < lst[mid]:
        right = mid - 1
        return binary_search(lst[:mid], n)
    else:
        print("找到了")
        return True

n = int(input("请输入一个数字n:")) # 178
ret = binary_search(lst, n)
print(ret)
View Code

猜你喜欢

转载自www.cnblogs.com/Knight-huang/p/9912407.html