专栏首页python3装饰器和推导式

装饰器和推导式

#!/usr/bin/env python
# -*- coding:utf-8 -*-

# 2.请为 func 函数编写一个装饰器,添加上装饰器后可以实现:执行func时,先输入"before",然后再执行func函数内部代码。
"""
def di(arg):
    def inner():
       print('before')
       v = arg()
       return v
    return inner

@di
def func():
    return 100 + 200

val = func()
print(val)
"""

# 3.请为 func 函数编写一个装饰器,添加上装饰器后可以实现:执行func时,先执行func函数内部代码,再输出 "after"
"""
def di(arg):
    def inner():
        print(arg())
        print('after')
    return inner

@di
def func():
    return 100 + 200


val = func()
"""

# 4.请为以下所有函数编写一个装饰器,添加上装饰器后可以实现:执行func时,先执行func函数内部代码,再输出 "after"
"""
def di(arg):
    def inner(*args, **kwargs):
        print(arg(*args, **kwargs))
        print('after')
    return inner


@di
def func(a1):
    return a1 + "傻叉"


@di
def base(a1, a2):
    return a1 + a2 + '傻缺'


@di
def base2(a1, a2, a3, a4):
    return a1 + a2 + a3 + a4 + '傻蛋'


base('a', 'b')
func("a")
base2('a','b','c','d')
"""

# 5.请为以下所有函数编写一个装饰器,添加上装饰器后可以实现:将被装饰的函数执行5次,讲每次执行函数的结果按照顺序放到列表
# 中,最终返回列表。
"""
import random
lst = []


def decorate(arg):
    def inner():
        for i in range(5):
            lst.append(arg())

    return inner


@decorate
def func():
    return random.randint(1, 4)


result = func()  # 执行5次,并将每次执行的结果追加到列表最终返回给result
print(result)
print(lst)
"""

# 6.请为以下函数编写一个装饰器,添加上装饰器后可以实现:执行 read_userinfo 函时,先检查文件路径是否存在,如果存在则执行
# 后,如果不存在则 输入文件路径不存在,并且不再执行read_userinfo函数体中的内容,再讲 content 变量赋值给None。
'''
import os


def decorate(arg):
    def inner(*args):
        if os.path.exists:
            v = arg(*args)
            print(v)
            return v
        else:
            print('文件路径不存在')

    return inner


@decorate
def read_userinfo(path):
    file_obj = open(path, mode='r', encoding='utf-8')
    data = file_obj.read()
    file_obj.close()
    return data


content = read_userinfo('a.txt')

"""
温馨提示:如何查看一个路径是否存在?
import os
result = os.path.exists('路径地址')

# result为True,则表示路径存在。
# result为False,则表示路径不存在。
"""
'''

# 7.请为以下 user_list函数编写一个装饰器,校验用户是否已经登录,登录后可以访问,未登录则提示:请登录后再进行查看,然后
# 再给用户提示:系统管理平台【1.查看用户列表】【2.登录】并选择序号。此变量用于标记,用户是否经登录。
#    True,已登录。
#    False,未登录(默认)
'''
CURRENT_USER_STATUS = False
def decorate(arg):
    def inner():
        if CURRENT_USER_STATUS:
            return arg()
        else:
            print('请登录后查看!')
        return
    return inner

@decorate
def user_list():
    """查看用户列表"""
    for i in range(1, 100):
        temp = "ID:%s 用户名:老男孩-%s" % (i, i,)
        print(temp)

def login():
    """登录"""
    print('欢迎登录')
    while True:
        username = input('请输入用户名(输入N退出):')
        if username == 'N':
            print('退出登录')
            return
        password = input('请输入密码:')
        if username == 'alex' and password == '123':
            global CURRENT_USER_STATUS
            CURRENT_USER_STATUS = True
            print('登录成功')
            return
        print('用户名或密码错误,请重新登录。')
def run():
    func_list= [user_list,login]
    while True:
        print("""系统管理平台
        1.查看用户列表;
        2.登录""")
        index = int(input('请选择:'))
        if index >=0 and index < len(func_list)+1:
            func_list[index-1]()
        else:
            print('序号不存在,请重新选择。')

run()
'''

# 8.看代码写结果
'''
v = [lambda:x for x in range(10)]
print(v)        # [十个不同的lambda地址]
print(v[0])     # 一个内存地址
print(v[0]())   # 9
'''

# 9.看代码写结果
'''
v = [i for i in range(10,0,-1) if i > 5]
print(v)        # [10,9,8,7,6]
'''

# 10.看代码写结果
'''
data = [lambda x:x*i for i in range(10)]    # 新浪微博面试题
print(data)                                 # [十个不同的lambda地址]
print(data[0](2))                           # 18
print(data[0](2) == data[8](2))             # True
'''

# 11.请用列表推导式实现,踢出列表中的字符串,然后再将每个数字加100,最终生成一个新的列表保存。
'''
data_list = [11, 22, 33, "alex", 455, 'eirc']
new_data_list = [i+100 for i in data_list if type(i)!=str]  # 请在[]中补充代码实现。
print(new_data_list)
'''

# 12.请使用字典推导式实现,将如果列表构造成指定格式字典.
'''
data_list = [
    (1, 'alex', 19),
    (2, '老男', 84),
    (3, '老女', 73)
]
"""请使用推导式将data_list构造生如下格式:
info_list = {
    1: ('alex', 19),
    2: ('老男', 84),
    3: ('老女', 73)
}
"""
info_list = { i[0]:(i[1],i[2]) for i in data_list}
print(info_list)
'''

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python全栈开发之---装饰器

    你觉得碍眼,python的开发者也觉得碍眼,所以就为我们提供了一句语法糖来解决这个问题!

    py3study
  • Python函数式编程之装饰器

    py3study
  • Python的安装、pycharm的安装

    ctrl + alt + l: ctrl+a 选中,ctrl + alt + l   快速调整格式。

    py3study
  • Python全栈开发之---装饰器

    你觉得碍眼,python的开发者也觉得碍眼,所以就为我们提供了一句语法糖来解决这个问题!

    py3study
  • Python函数式编程之装饰器

    py3study
  • Python的函数式编程

    ZONGLYN
  • python3学习之装饰器

    py3study
  • python 函数(3)

    py3study
  • Python数据科学:Logistic回归

    Logistic回归通过logit转换将取值为正负无穷的线性方程的值域转化为(0,1),正好与概率的取值范围一致。

    小F
  • 详解Python闭包与装饰器

    首先闭包并不仅是一个Python中的概念,在函数式编程语言中应用较为广泛。理解Python中的闭包一方面是能够正确的使用闭包,另一方面可以好好体会和思考闭包的设...

    PayneWu

扫码关注云+社区

领取腾讯云代金券