闭包、装饰器及推导式
一、闭包
闭包的定义需要满足以下三个条件:
1.在一个外函数中定义了一个内函数
2.内函数里运用了外函数的临时变量
3.并且外函数的返回值是内函数的引用
def temp(func):
print('--1--')
def test(a):
print('a', a, func)
return test
res = temp('2') # = test
res1 = res('3') # = test('3')
二、装饰器
装饰器 (@) 是一种语法糖,主要用于在函数或类的基础上添加一些可重用的额外功 能。从应用开发的角度来看的话,我们使用装饰器来对我们的应用代码进行功能性 扩展和包装,以提高代码的可重用性和可维护性。
def temp_1(fun):
def test(a, b):
print(f'下面啊让我们欢迎首届金榴莲{a}奖获得者{b},上台领奖')
fun()
print('掌声欢迎!')
return test
@temp_1 # temp_1(temp_2) = test
def temp_2():
a = '最佳发胶奖'
b = '《雷霆战将》'
print('烂片颁奖词')
temp_2('最佳发胶奖', '《雷霆战将》')
下面啊让我们欢迎首届金榴莲最佳发胶奖奖获得者《雷霆战将》,上台领奖
烂片颁奖词
掌声欢迎!
三、推导式
1.列表推导式
[out_express for out_express in input_list]
li = [i/5 for i in range(1, 5)]
print(li)
[0.2, 0.4, 0.6, 0.8]
[out_express for out_express in input_list if out_express_condition]
li = [i**2 for i in range(1, 10) if i > 5]
print(li)
[36, 49, 64, 81]
[i for row in matrix for i in row]
li = [j**i for i in range(1, 4) for j in range(6, 10)]
print(li)
[6, 7, 8, 9, 36, 49, 64, 81, 216, 343, 512, 729]
2.字典推导式
{out_exp_key: out_exp_value for out_exp in input_list}
li_1 = ['name', 'age', 'address']
li_2 = ['CGT', '21', 'dezhou']
dic = {i: j for i in li_1 for j in li_2}
print(dic)
{'name': 'dezhou', 'age': 'dezhou', 'address': 'dezhou'}
3.集合推导式
{out_exp_res for out_exp in input_set}
import random
sat_1 = {random.randint(1, 1000) for i in range(1, 20)}
print(sat_1)
4.元组没有推导式,(i for i in range(10)) 返回的是 generator object
四、作业
作业1
过滤掉该列表 names = [“jerry”,“hansen”,“Amy”,“Wendy”,“Tom”,“Bob”]
长度小于或等于3的字符串列表,并将剩下的转换成大写字母。
答:
names = ["jerry", "hansen", "Amy", "Wendy", "Tom", "Bob"]
names_1 = [i.upper() for i in names if len(i) > 3]
print(names_1)
作业2
求(x,y),其中x是0-5之间的偶数,y是0-5之间的奇数组成的元组列表。 效果如下:[(0, 1), (0, 3), (2, 1), (2, 3), (4, 1), (4, 3)]
答:
li_1 = [i for i in range(5) if i % 2 ==0]
li_2 = [i for i in range(5) if i % 2 ==1]
tu = set([(i, j) for i in li_1 for j in li_2])
print(tu)
作业3
[ ‘Bob’, ‘JOHN’, ‘alice’, ‘bob’, ‘ALICE’, ‘James’, ‘Bob’,‘JAMES’,‘jAMeS’ ] 该列表很紊乱,实现去重,以及将名字格式统一成首字母大写(str.capitalize())
答:
li_1 = ['Bob', 'JOHN', 'alice', 'bob', 'ALICE', 'James', 'Bob', 'JAMES', 'jAMeS']
li_2 = {i.capitalize() for i in li_1}
print(li_2)
想学习更多关于python的文章,欢迎专注我们的公众号奥~