Python 作用域、高阶函数、装饰器、网络编程---笔记5

迭代

迭代是访问集合元素的一种方式。

我们已经知道可以对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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值