zoukankan      html  css  js  c++  java
  • 装饰器和推导式

    #!/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)
    '''
  • 相关阅读:
    TOEFL资料 280多个
    Eclipse搭建J2ME开发环境
    Session.Abandon和Session.Clear有何不同
    进程之同步、互斥PV操作笔记
    Windows Mobile 6.5 实现联系人分组显示
    关于数据库的版本控制
    xhtml的布局,满屏,高度自适应
    MOSS 项目模板
    DNN中与模块相关的信息
    J2EE学习笔记
  • 原文地址:https://www.cnblogs.com/zjx1/p/10712572.html
Copyright © 2011-2022 走看看