python闭包、装饰器及推导式

在这里插入图片描述

一、闭包

闭包的定义需要满足以下三个条件:
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的文章,欢迎专注我们的公众号奥~

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值