装饰器

def assist(item):def inner():print("成为伙伴")item()print("完结")return inner@assist  # 相当于xxx = assist(EVA)
def EVA():print("一起成为EVA驾驶员")@assist  # 相当于xxx = assist(One_Piece)
def One_Piece():print("一起成为海贼王")EVA()  # 执行的是内层函数inner
One_Piece()print("------------------------------------------")def assist(item):def inner(*args, **kwargs):print("登录")item(*args, **kwargs)print("退出")return inner@assist
def play_steam(username, pwd, game):print("我要开启steam了.", username, pwd, game)@assist
def play_gamer(username, pwd):print("我要玩游戏了.", username, pwd)play_gamer("admin", "123456")
play_steam("admin", "123456", "艾尔登")print("------------------------------------------")# 通用装饰器写法(接收返回值):
def assist(item):def inner(*args, **kwargs):print("登录")ret = item(*args, **kwargs)print("退出")return retreturn inner@assist
def play_steam(username, pwd, game):print("我要开启steam了.", username, pwd, game)return "买个新游戏"@assist
def play_gamer(username, pwd):print("我要玩游戏了.", username, pwd)play_gamer("admin", "123456")
ret = play_steam("admin", "123456", "艾尔登")
print(ret)print("------------------------------------------")# 一个函数可以被多个装饰器装饰
def wrapper1(item):def inner(*args, **kwargs):print("这里是wrapper1进入")ret = item(*args, **kwargs)print("这里是wrapper1退出")return retreturn innerdef wrapper2(item):def inner(*args, **kwargs):print("这里是wrapper2进入")ret = item(*args, **kwargs)print("这里是wrapper2退出")return retreturn inner@wrapper1  # 装饰顺序:wrapper1(wrapper2(target))
@wrapper2
def target():print("我是目标")target()"""
这里是wrapper1进入
这里是wrapper2进入
我是目标
这里是wrapper2退出
这里是wrapper1退出
"""

一个简单的装饰器例子

flag = False  # 添加判断状态,输入成功一次,后续的操作不用重复登录def login_verify(item):def inner(*args, **kwargs):global flag  # 用于下面修改全局变量if flag == False:while 1:username = input("请输入用户名>>>")pwd = input("请输入密码>>>")if username == "admin" and pwd == "123456":print("登陆成功")flag = Truebreakelse:print("用户名或密码失败,请重新输入")ret = item(*args, **kwargs)return retreturn inner@login_verify
def add():print("我要进行添加")@login_verify
def update():print("我要进行修改")@login_verify
def search():print("我要查询")add()
update()
search()
"""
请输入用户名>>>admin
请输入密码>>>123456
登陆成功
我要进行添加
我要进行修改
我要查询
"""

迭代器

"""
iterable:可迭代的
str,list,tuple,dict,set,open()
可迭代的数据类型都会提供一个迭代器,可以把数据类型中的所有数据逐一取出
"""it = iter("我要成为海贼王")print(next(it, "没了"))
print(next(it, "没了"))
print(next(it, "没了"))
print(next(it, "没了"))
print(next(it, "没了"))
print(next(it, "没了"))
print(next(it, "没了"))
print(next(it, "没了"))
print(next(it, "没了"))  # 若超出范围,则显示指定内容来代替报错it = "我驾驶EVA".__iter__()
print(it.__next__())
print(it.__next__())
print(it.__next__())
print(it.__next__())
print(it.__next__())
print(it.__next__())print("---------------------------------")# 模拟for循环工作原理
s = "我喜欢看动漫"
it = s.__iter__()
while 1:try:data = it.__next__()print(data)except StopIteration:break
print("结束")
# for循环里面一定是要拿迭代器的,所以不可迭代的对象不能用for循环,例如int类型
# 迭代器统一了不同数据类型的遍历工作print("---------------------------------")# 迭代器本身也是可迭代的
s = "我喜欢打游戏"
it = s.__iter__()for i in it:print(i)

生成器

# 生成器: 本质是迭代器
def func():print("aaa")yield 123  # 与return效果相似,只要函数中出现了yield,就是生成器函数# 生成器函数执行时,不会执行函数,得到的是一个生成器ret = func()
print(ret)
print(ret.__next__())  # 只有执行next的时候,yield才会返回数据print("------------------------------------------")def func():print("aa")yield 11  # 与return不同,不会停止下面的代码print("bb")yield 22print("cc")yield 33ret = func()
print(ret.__next__())  # aa 11
print(ret.__next__())  # bb 22
print(ret.__next__())  # cc 33print("------------------------------------------")def order():lst = []for i in range(100):lst.append(f"漫画{i}")if len(lst) == 10:  # 10次一拿yield lst# 下一次从这个位置开始lst = []  # 下一次拿清空gen = order()
print(gen.__next__())
print(gen.__next__())
print(gen.__next__())print("---------------------------------")# 生成器表达式
gen = (i for i in range(10))
# print(gen.__next__())
# print(gen.__next__())
# print(gen.__next__())
# for i in gen:
#     print(i)
print(list(gen))

推导式

lst = []
for i in range(10):lst.append(i)print(lst)# 推导式简化代码
lst = [i for i in range(10)]
print(lst)# lst = [i for i in range(1, 10, 2)]
lst = [i for i in range(10) if i % 2 == 1]
print(lst)lst = [f"漫画{i}" for i in range(50)]
print(lst)lst = ["asuka", "iroha", "asuna"]
# 都变成大写
lst2 = [item.upper() for item in lst]
print(lst2)print("---------------------------------------")#集合推导式
s = {i for i in range(10)}
print(s)#字典推导式
lst = ["asuka", "iroha", "asuna", "gundam"]
dic = {i:lst[i] for i in range(len(lst))}
print(dic)#没有元组推导式

Python基础重点复习(5)相关推荐

  1. Python基础重点复习(4)

    函数 # 加减乘除四则运算 def calculator(a, opt, b):if opt == "+":print(a + b)elif opt == "-" ...

  2. Python基础重点复习(2)

    关于哈希​​ 可哈希:不可变的数据类型(int str tuple bool) 不可哈希:可变的数据类型(list dict set) 列表的增删改查 # 向列表中添加内容 lst = [] lst. ...

  3. python基础语法复习[二] 函数、类

    python基础语法复习[二] 前言 一.函数 1.基本概念 2.一般实例 3.参数传递 (1)传不可变对象 (2)传可变对象 4.函数递归调用实例 (1)eg:实现字符串的反转: (2)递归思想画树 ...

  4. python学习笔记1——(廖雪峰教程,菜鸟教程)python基础

    python学习笔记1--(廖雪峰教程,菜鸟教程) https://www.liaoxuefeng.com(https://www.liaoxuefeng.com) 阿修视频 .Python基础(复习 ...

  5. Python基础复习---重点知识笔记(一)

    该篇文章是针对自己在学习python基础知识的时候,对于不易理解或者重点需要掌握知识的总结性概括.后续遇到的问题会不断加入进来! 文章目录 一.函数 1.1 局部作用域不能使用其他局部作用域内的变量 ...

  6. python 基础部分重点复习整理--从意识那天开始进阶--已结

    pythonic 风格编码 入门python好博客 进阶大纲 有趣的灵魂 老齐的教程 老齐还整理了很多精华 听说 fluent python + pro python 这两本书还不错! 元组三种遍历, ...

  7. Python基础知识总结(期末复习精简版)

    文章目录 知识汇总 前言 推荐的学习资料 复习要点 组合数据类型 序列类型通用操作符和函数 集合类型 映射类型 数值操作 运算符 字符串操作 字符串切片 基本切片操作 高级切片操作 操作.相关函数.相 ...

  8. 计算机应用基础期末考试电大,(电大)期末考试2017年广播电视大学网考《计算机应用基础》重点复习题目汇总版(理论题及操作题)...

    2017年度最新广播电视大学(电大)期末考试网考<计算机应用基础>重点复习题目整理汇总版(理论题及操作题) 1.一般认为,世界上第一台电子数字计算机诞生于1946年. 2.计算机当前已应用 ...

  9. python编写自定义函数判断n1-n2范围内的素数_【每日道代码题001】- PYTHON基础复习...

    问题001-1:请对输入三个整数a,b,c,判断能否以它们为三个边长构成三角形.若能,输出YES和面积,否则输出NO a = float(input()) b = float(input()) c = ...

  10. Python基础超详细笔记[为了自己复习写的笔记~]

    加粗样式@[toc] 计算机组成 硬件系统 中央处理器:cpu 存储器: 内存储器:内存 外存储器:硬盘 u盘 输入设备:键盘.鼠标- 输出设备:显示器.打印机- 软件系统 系统软件:操作系统.- 应 ...

最新文章

  1. 计算机中的大端模式与小端模式
  2. 用友软件工程IT应用研究院
  3. php mcrypt取消,php – Mcrypt弃用后如何解密?
  4. 高等组合学笔记(一)集合的计数,映射与集合的排列组合
  5. linux中如何设置用户自己的工作环境,Linux系统下设置用户登录环境
  6. map函数python返回值,Python中map函数使用
  7. EditText设置可以编辑和不可编辑状态
  8. 配置apache密码认证
  9. 不要打开文件,阅读Rvt信息档案
  10. Map转换List一些方法
  11. IDEA 2017破解 license server激活
  12. bat批处理之清理系统垃圾
  13. php生成流水号,生成唯一流水号
  14. TWebLive基于TRTC和IM实现web群直播
  15. 如何设置显示网络计算机,如何在台式计算机上设置无线局域网络
  16. 2019年年终总结~平淡生活
  17. Linux之计划任务与系统安全(cron周期性计划任务)
  18. 5500xt挖矿算力_(视频)静态计算 RTX 3080 的以太坊挖矿回本周期 白露矿业报告 (20.09.19)...
  19. 4-3指令系统-CISC和RISC
  20. 系统DIY:雨林木风YlmF系统DIY Y1.5(转)

热门文章

  1. it行业se是_CS、IT、SE到底有什么区别?
  2. noob_臭代码-Java Noob的自白
  3. 支付宝手机wap支付对接接口
  4. 【P44】DC-DC隔离模块,解决蓝牙共地干扰问题
  5. 什么是RS232电平?什么是TTL电平?
  6. 拨号连接显示服务器断开连接,弹出拨号连接的解决方法【详细介绍】
  7. C语言实现FTP客户端(已编译,亲试可用~)
  8. .net core mvc中使用ef
  9. jetbrains projector远程开发使用入门
  10. c语言 虚拟示波器软件下载,虚拟示波器软件(示波器工具)V3.1 官方版