oldboy s21day13装饰器和推导式
#!/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)
'''
oldboy s21day13装饰器和推导式的更多相关文章
- python学习 day13 装饰器(一)&推导式
装饰器&推导式 传参位置参数在前,关键词参数在后 函数不被调用内部代码不被执行 函数在被调用的时候,每次都会开辟一个新的内存地址,互不干扰 #经典案例 def func(num): def i ...
- oldboy s21day14装饰器模块和面试题
# 1.为函数写一个装饰器,在函数执行之后输入 after"""def wrapper(arg): def inner(*args): arg() print('afte ...
- day13 闭包及装饰器
""" 今日内容: 1.函数的嵌套定义及必包 2.global 与 nonlocal 关键字 3.开放封闭原则及装饰器 """ " ...
- day14 带参装饰器、迭代器、生成器
""" 今日内容: 1.带参装饰器及warps 2.迭代器 3.生成器 """ """ # 一.带参装饰器及w ...
- python学习Day13 函数的嵌套定义、global、nonlocal关键字、闭包及闭包的运用场景、装饰器
复习 1.函数对象:函数名 => 存放的是函数的内存地址1)函数名 - 找到的是函数的内存地址2)函数名() - 调用函数 => 函数的返回值 eg:fn()() => fn的返回值 ...
- python函数闭包-装饰器-03
可调用对象 callable() # 可调用的(这个东西加括号可以执行特定的功能,类和函数) 可调用对象即 callable(对象) 返回为 True 的对象 x = 1 print(cal ...
- day10.闭包函数与装饰器
一.闭包函数 1.闭函数:被封闭起来的函数==>定义在函数内部的函数,特点是只能在函数内调用 2.包函数:该函数引用了一个名字,该名字来自于E这一层 总结:闭包函数指的是定义在函数内部的函数引用 ...
- 周末学习笔记——day02(带参装饰器,wraps修改文档注释,三元表达式,列表字典推导式,迭代器,生成器,枚举对象,递归)
一,复习 ''' 1.函数的参数:实参与形参 形参:定义函数()中出现的参数 实参:调用函数()中出现的参数 形参拿到实参的值,如果整体赋值(自己改变存放值的地址),实参不会改变,(可变类型)如果修改 ...
- day11 - 15(装饰器、生成器、迭代器、内置函数、推导式)
day11:装饰器(装饰器形成.装饰器作用.@语法糖.原则.固定模式) 装饰器形成:最简单的.有返回值的.有一个参数的.万能参数 函数起的作用:装饰器用于在已经完成的函数前后增加功能 语法糖:使代码变 ...
随机推荐
- 使用Java反射优化多个方法调用
有段时间没来写博客了,心里一直念叨空了来,今天有时间来记录一篇.前段时间领导提出优化部分系统模块,根据业务要求系统中有很多产品,产品下面有N个指标,一个指标就对应一个方法,所以系统代码中就是这样一个情 ...
- spring异步执行报异常No qualifying bean of type 'org.springframework.core.task.TaskExecutor' available
最近观察项目运行日志的时候突然发现了一个异常, [2018-04-03 10:49:07] 100.0.1.246 http-nio-8080-exec-9 DEBUG org.springframe ...
- centos7下git版本升级及gitlab安装
centos系统自带的git版本过低,当使用git拉取.推送.克隆的时候可能会报错,常见的错误: error: The requested URL returned error: 401 Unauth ...
- R语言学习——处理数据对象的实用函数
length(object) # 显示对象中元素/成分的数量 dim(boject) # 显示某个对象的维度 str(object) # 显示某个对象的结构 class(object) # 显示某个对 ...
- day15-面向对象基础(二)
今天整理类的组合以及类的三大特性 1.类的组合 2.类的继承 3.类的封装 4.类的多态 开始今日份整理 1.类的组合 类与类之间,并不是独立的,很多的时候在正常使用的时候都是类与类之间互相调用,所以 ...
- 开放数据接口 API 简介与使用场景、调用方法
此文章对开放数据接口 API 进行了功能介绍.使用场景介绍以及调用方法的说明,供用户在使用数据接口时参考之用. 在给大家分享的一系列软件开发视频课程中,以及在我们的社区微信群聊天中,都积极地鼓励大家开 ...
- Sublime 禁止自动升级
打开SUblime Prefreences 找到"设置-用户" 添加 "update_check":false, 即可禁用默认升级 此时完整如下 { &q ...
- DP求树的重心
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> ...
- JVM内存区域详解
本文分为两部分:一是JVM内存区域的讲解:二是常见的内存溢出异常分析. 1.JVM内存区域 java虚拟机在执行java程序的过程中会把它管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途, ...
- JAXB注解的使用详解
前言: 最近一直在做各种接口的对接,接触最多的数据类型就是JSON和XML数据,还有XML中包含JSON的数据,而在Java中对象和XML之间的转换经常用到JAXB注解,抽空在这里总结一下,首先做一下 ...