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]