迭代
迭代是访问集合元素的一种方式。
我们已经知道可以对list、tuple、str等类型的数据使用for…in…的循环语法从其中依次拿到数据进行使用,我们把这样的过程称为遍历,也叫迭代。
可迭代的对象
在python的常见数据类型中,str、list、tuple、dict、tuple、set等数据类型都是可迭代对象
如何判断一个对象是否可以迭代
#字符可迭代
isinstance('abc', Iterable)
True
迭代器
一个具备了__iter__方法的对象,就是一个可迭代对象。
iter()函数与next()函数
通过iter()函数获取这些可迭代对象的迭代器
next()函数来获取下一条数据
代完最后一个数据之后,再次调用next()函数会抛出StopIteration的异常,来告诉我们所有数据都已迭代完成,不用再执行next()函数了
一个实现了__iter__方法和__next__方法的对象,就是迭代器。
1.作用域
L 局部作用域 local
E 嵌套作用域 enclosed
G 全局作用域 global
B 内置作用域 built-in
2.高阶函数、
把函数作为参数传⼊,这样的函数称为⾼高阶函数,⾼高阶函数是函数式编程的体现。函数式编程就是指这
种⾼高度抽象的编程范式。
# 普通形式
def mySum(a,b):
return a+b
c = mySum(4,5)
print(c)
# 高阶函数形式
def mySum(a,b,f):
return f(a)+f(b)
dd = mySum(33,5,abs)
print(dd)
map
map(func, lst),将传⼊入的函数变量量func作⽤用到lst变量量的每个元素中,并将结果组成新的列列表(Python2)/ 迭代器器(Python3)返回。
reduce()
reduce(func,lst),其中func必须有两个参数。每次func计算的结果继续和序列列的下⼀一个元素做累积计算。
reduce()传⼊入的参数func必须接收2个参数。
filter()
filter(func, lst)函数⽤用于过滤序列列, 过滤掉不不符合条件的元素, 返回⼀一个 filter 对象。如果要转换为列列表, 可以使⽤用 list() 来转换。
sorted()
sorted(iterable, key=abs, reverse=False)
功能:
对所有可迭代的对象进行排序操作
参数:
iterable – 可迭代对象。
key – key指定的函数将作用于可迭代对象上的每一个元素,并根据key函数返回的结果进行排序
reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)
3.装饰器、
就是给已有函数增加额外功能的函数,它本质上就是一个闭包函数。
装饰器的功能特点:
不修改已有函数的源代码
不修改已有函数的调用方式
给已有函数增加额外的功能
def login(func):
def inner(a,b):
print('first login')
func(a,b)
return inner
@login
def comment(a,b):
"""add login to comment"""
print("再评论",a,b)
comment(3,5)
#调用comment之前会先调用login方法,会把当前comment方法传入到login方法
#它的代表就是func,参数也同理一并传入。
4.网络编程
5.闭包
在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数称为闭包。
通过闭包的定义,我们可以得知闭包的形成条件:
1.在函数嵌套(函数里面再定义函数)的前提下
2.内部函数使用了外部函数的变量(还包括外部函数的参数)
3.外部函数返回了内部函数
# 定义一个外部函数
def func_out(num1):
# 定义一个内部函数
def func_inner(num2):
# 内部函数使用了外部函数的变量(num1)
result = num1 + num2
print("结果是:", result)
# 外部函数返回了内部函数,这里返回的内部函数就是闭包
return func_inner
# 创建闭包实例
f = func_out(4)
# 执行闭包
f(2)
f(3)
#结果:
#6
#7
作用:
闭包可以保存外部函数内的变量,不会随着外部函数调用完而销毁。
注意点:
由于闭包引用了外部函数的变量,则外部函数的变量没有及时释放,消耗内存
6.lambda 表达式
# 普通函数
def fn1():
return 200
print(fn1)
print(fn1())
# lambda表达式
a = lambda :100
#打印function a的地址
print(a)
# 打印a的方法返回值
print(a())
# 一个参数或者多个参数 b+c 为运行的返回值
a = lambda b,c:b+c
print(a(44,3))
#可变参数*args
a = lambda *args :args
# 这⾥里里的可变参数传⼊入到lambda之后,返回值为元组
print(a(1,2,3,4))
# 可变参数:**kwargs 返回的是字典
a = lambda ** kwargs:kwargs
print(a(q=33,w=22))
# 带判断的lambda
a = lambda a ,b : a if a>b else b
print(a(33,44))
students = [
{'name': 'TOM', 'age': 20},
{'name': 'ROSE', 'age': 19},
{'name': 'Jack', 'age': 22}
]
# 按name值降序排列列
students.sort(key=lambda x: x['name'], reverse=True)
print(students)