复习整理2

filter 接收函数,作为筛选条件,返回True,false

# # filter(function(筛选),iterable)
# def func(x):
#     return x % 2 == 1
# lst = [1, 2,3,4,5,6,7,8,9]
# lt = filter(func,lst)  #接收函数,作为筛选条件
# print(list(lt))

filter()

map函数,对每一个元素进行映射,分别执行func

# # map 映射函数,  语法 map(func,iterable) 可以对可迭代对象中的每一个元素进行映射,分别执行func
#
# # 计算每一个元素的平方
#
# # def func(x):
# #     return x ** 2
# #
# # lst = [1,3,5,7,9]   # 接收到的是一个迭代器
# # lt = map(func,lst)
# # print(lt)
# # print(list(lt))
#
# lst1 = [1,3,5,7,9]
# lst2 = [2,4,6,8,10]
#
# print(list(map(lambda x,y: x+y, lst2,lst1)))  # 如果后面有多个列表,需要一一对应

递归,函数自身条用自身,只关注起始条件和结束条件不关注中间过程。递归时注意最大递归深度,即结束条件写好

# 在函数中自己调用自己就是递归

# def func(a,b,n):
#     print(a)
#     while n < 5:
#         a,b = b,a+b
#         print(b)
#         n += 1
#
# func(0,1,0)

# n = 993
# def func():
#     global n    # 不要在局部作用域里面尝试改变全局变量
#     while n > 0:
#         print("ly")
#         n -= 1
#         func()
#
# func()

# def func():
#     print("ly")
#     func()
#
# func()  # 超过最大递归深度会报错


# 文件夹结构就是树形结构
# 遍历树形结构
import os
filepath = "F:\python\12_27"

def read(filepath,n):
    lt = os.listdir(filepath)
    for e in lt:
        if os.path.isdir(os.path.join(filepath,e)):
            print("	"*n,e)
            read(os.path.join(filepath,e),n+1)
        else:
            print("	"*n,e)

read(filepath,0)

二分查找,两种递归写法,一种普通写法

# 二分查找
# lst = [11,22,33,44,55,66,77,88,99]
# left = 0
# right = len(lst) - 1
# n = 66
# while left <= right:
#     middle = (left + right) // 2
#     if n > lst[middle]:
#         left = middle + 1
#     elif n < lst[middle]:
#         right = middle - 1
#     else:
#         print(middle)
#         break
# else:
#     print("没到到")

# lst = [11,22,33,44,55,66,77,88,99]
# def func(left,right,n):
#     middle = (left + right) // 2
#     if left > right:
#         return -1
#     if lst[middle] < n:
#         left = middle + 1
#     elif lst[middle] > n:
#         right = middle - 1
#     else:
#         return middle
#     return func(left,right,n)
#
# print(func(0,len(lst),78))


# lst = [11,22,33,44,55,66,77,88,99]
# def func(lst,n):
#     middle = (0 + len(lst)) // 2
#     if len(lst) <= 0:
#         return -1
#     if n > lst[middle]:
#         lst = lst[middle:]
#     elif n < lst[middle]:
#         lst = lst[:middle]
#     else:
#         return lst[middle],"Yes"
#     return func(lst,n)
#
# print(func(lst,88))

快捷键: ctrl b 查看源码

              ctrl alt l 按照pep8 规范代码。自己编辑时注意,不要太依赖

# # # def func(a, b, c):
# # #     print(a, b, c)
# # #
# # #
# # # func(1, 2, 1)
# #
# # def func(*args,**kwargs):  # 动态参数。针对的是传参不确定的情况,*args 接收全部位置参数, **kwargs 接收全部为位置参数
# #     print(args)
# #     print(kwargs)
# #     print(*args)
# #     # print(**kwargs)
# #
# # func(1, 2, 3, name = "Ly", age=100)
# # # (1, 2, 3)
# # # {'name': 'Ly', 'age': 100}
# # # 1 2
# #
# # # 当定义一个函数的时候* 代表的是聚合,当执行一个函数的时候*代表的打散
# #
#
#
# def func(*args,**kwargs):
#     print(args)
#     print(*args)
#
# l1 = [1, 2, 3]
# l2 = [4, 5, 6]
# func(*l1,*l2)

def func():
    a = 1
    b = 2
    print(a)
    def func2():
        b = 3
        print(a,b)
    print(666)
    func2()
    print(111)

func()  # 1 666 1 3  111
回顾
生成器
生成器的本质就是迭代器
创建的方式
生成器函数
在函数中包含了yield,可以分段执行函数
def func():
pass
yield 1
yield 2
func() 创建一个生成器
__next__() 可以触发一次生成器执行,执行到下一个yield。最后一个yield之后在执行__next__()会报错。StopIteration

生成器表达式
列表表达式:[结果 for 变量 in 可迭代对象 if 条件筛选]
生成器表达式:(结果 for 变量 in 可迭代对象 if 条件筛选),没有元组推导式
字典表达式:(结果(k:v) for 变量 in 可迭代对象 if 条件筛选)
集合表达式:(结果k,v) for 变量 in 可迭代对象 if 条件筛选)

特点:
节省内存
惰性机制
只能向前


函数的定义:以功能为导向
函数的返回值 :结束函数
不写return 或者return 后面不写时默认都是None。多个返回值时都作为元组返回

函数的传参:(实参)1.位置参数
2.关键字参数
3.混合参数 位置参数在关键在参数的前面
(形参)1.位置参数
2.默认参数
3.动态参数 位置参数在默认参数的前面 *args,**kwargs

名称空间:当程序执行时,将变量与值的对应关系存放在一个空间中,临时名称空间:这个空间会随着函数执行结束而消失。
内置名称空间:python自带的内置函数

全局作用域:内置名称空间,全局名称空间。 局部作用域 临时名称空间

global:在函数中声明一个全局变量
在函数中修改一个全局变量


nonlocal 对父级或者更高级变量进行修改但是不能修改全局变量

闭包:内存函数对外存函数的引用,在函数执行结束后,变量不会马上消失,可以节省时间

迭代器:内部含有__iter__和__next__方法的
好处:节省内存
惰性机制
一直向前
生成器:
自己用python代码写的迭代器
生成器表达式:循环模式[i for i in range(20)]
筛选模式[i for i in range(20) if i > 5]


原文地址:https://www.cnblogs.com/yfjly/p/10575735.html