python中的上下文管理和高阶函数的基本使用

python中的上下文管理和高阶函数的基本使用

上下文管理

1什么是with语句

  1. with是一种上下文管理协议,目的在于从流程图中把 try,except 和finally 关键字和资源分配释放相关代码统统去掉,简化try….except….finlally的处理流程。

  2. 所以使用with处理的对象必须有enter()和exit()这两个方法

1)with通过enter方法初始化(enter方法在语句体执行之前进入运行)

2)然后在exit中做善后以及处理异常(exit()方法在语句体执行完毕退出后运行)

  1. with语句使用场景*

  2. with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源

  3. 比如文件使用后自动关闭、线程中锁的自动获取和释放等。

3.with处理文件操作的实例

with open('/etc/passwd') as f:

  for line in f:
    print(line)

# 这段代码的作用:打开一个文件,如果一切正常,把文件对象赋值给f,然后用迭代器遍历文件中每一行,当完成时,关闭文件;

# 而无论在这段代码的任何地方,如果发生异常,此时文件仍会被关闭。

高阶函数

1.lambda基本使用

  1. lambda只是一个表达式,函数体比def简单很多。

  2. lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

  3. lambda表达式是起到一个函数速写的作用。允许在代码内嵌入一个函数的定义。

  4. 格式:lambda的一般形式是关键字lambda后面跟一个或多个参数,紧跟一个冒号,之后是一个表达式。

f = lambda x,y,z:x+y+z

print(f(1,2,3))           # 6

 

my_lambda = lambda arg : arg + 1

print(my_lambda(10))         # 11

2.三元运算

  1. 三元运算格式: result=值1 if x<y else 值2 if条件成立result=1,否则result=2

  2. 作用:三元运算,又称三目运算,主要作用是减少代码量,是对简单的条件语句的缩写

name = 'Tom' if 1 == 1 else 'fly'

print(name)

# 运行结果: Tom

 

f = lambda x:x if x % 2 != 0 else x + 100

print(f(10))           # 110

3. filter()函数可以对序列做过滤处理

利用 filter、lambda表达式 获取l1中元素小于33的所有元素 l1 = [11, 22, 33, 44, 55]

l1= [11,22,33,44,55]

a = filter(lambda x: x<33, l1)

print(list(a))

4.Map

利用map,lambda表达式将所有偶数元素加100

l1= [11,22,33,44,55]

ret = map(lambda x:x if x % 2 != 0 else x + 100,l1)

print(list(ret))

# 运行结果: [11, 122, 33, 144, 55]

5.reduce函数

使用reduce进行求和运算

  1. reduce()函数即为化简函数,它的执行过程为:每一次迭代,都将上一次的迭代结果与下一个元素一同传入二元func函数中去执行。

  2. 在reduce()函数中,init是可选的,如果指定,则作为第一次迭代的第一个元素使用,如果没有指定,就取seq中的第一个元素。

from functools import reduce

def f(x, y):

 return x + y

 

print(reduce(f, [1, 3, 5, 7, 9]))  # 25

# 1、先计算头两个元素:f(1, 3),结果为4;

# 2、再把结果和第3个元素计算:f(4, 5),结果为9;

# 3、再把结果和第4个元素计算:f(9, 7),结果为16;

# 4、再把结果和第5个元素计算:f(16, 9),结果为25;

# 5、由于没有更多的元素了,计算结束,返回结果25。

 

print( reduce(lambda x, y: x + y, [1, 3, 5, 7, 9])  )  # 25

6.sorted函数

sorted对字典排序

d = {'k1':1, 'k3': 3, 'k2':2}

# d.items() = [('k1', 1), ('k3', 3), ('k2', 2)]

a = sorted(d.items(), key=lambda x: x[1])

print(a)       # [('k1', 1), ('k2', 2), ('k3', 3)]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值