Python基础重点复习(5)
装饰器
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)相关推荐
- Python基础重点复习(4)
函数 # 加减乘除四则运算 def calculator(a, opt, b):if opt == "+":print(a + b)elif opt == "-" ...
- Python基础重点复习(2)
关于哈希 可哈希:不可变的数据类型(int str tuple bool) 不可哈希:可变的数据类型(list dict set) 列表的增删改查 # 向列表中添加内容 lst = [] lst. ...
- python基础语法复习[二] 函数、类
python基础语法复习[二] 前言 一.函数 1.基本概念 2.一般实例 3.参数传递 (1)传不可变对象 (2)传可变对象 4.函数递归调用实例 (1)eg:实现字符串的反转: (2)递归思想画树 ...
- python学习笔记1——(廖雪峰教程,菜鸟教程)python基础
python学习笔记1--(廖雪峰教程,菜鸟教程) https://www.liaoxuefeng.com(https://www.liaoxuefeng.com) 阿修视频 .Python基础(复习 ...
- Python基础复习---重点知识笔记(一)
该篇文章是针对自己在学习python基础知识的时候,对于不易理解或者重点需要掌握知识的总结性概括.后续遇到的问题会不断加入进来! 文章目录 一.函数 1.1 局部作用域不能使用其他局部作用域内的变量 ...
- python 基础部分重点复习整理--从意识那天开始进阶--已结
pythonic 风格编码 入门python好博客 进阶大纲 有趣的灵魂 老齐的教程 老齐还整理了很多精华 听说 fluent python + pro python 这两本书还不错! 元组三种遍历, ...
- Python基础知识总结(期末复习精简版)
文章目录 知识汇总 前言 推荐的学习资料 复习要点 组合数据类型 序列类型通用操作符和函数 集合类型 映射类型 数值操作 运算符 字符串操作 字符串切片 基本切片操作 高级切片操作 操作.相关函数.相 ...
- 计算机应用基础期末考试电大,(电大)期末考试2017年广播电视大学网考《计算机应用基础》重点复习题目汇总版(理论题及操作题)...
2017年度最新广播电视大学(电大)期末考试网考<计算机应用基础>重点复习题目整理汇总版(理论题及操作题) 1.一般认为,世界上第一台电子数字计算机诞生于1946年. 2.计算机当前已应用 ...
- python编写自定义函数判断n1-n2范围内的素数_【每日道代码题001】- PYTHON基础复习...
问题001-1:请对输入三个整数a,b,c,判断能否以它们为三个边长构成三角形.若能,输出YES和面积,否则输出NO a = float(input()) b = float(input()) c = ...
- Python基础超详细笔记[为了自己复习写的笔记~]
加粗样式@[toc] 计算机组成 硬件系统 中央处理器:cpu 存储器: 内存储器:内存 外存储器:硬盘 u盘 输入设备:键盘.鼠标- 输出设备:显示器.打印机- 软件系统 系统软件:操作系统.- 应 ...
最新文章
- 计算机中的大端模式与小端模式
- 用友软件工程IT应用研究院
- php mcrypt取消,php – Mcrypt弃用后如何解密?
- 高等组合学笔记(一)集合的计数,映射与集合的排列组合
- linux中如何设置用户自己的工作环境,Linux系统下设置用户登录环境
- map函数python返回值,Python中map函数使用
- EditText设置可以编辑和不可编辑状态
- 配置apache密码认证
- 不要打开文件,阅读Rvt信息档案
- Map转换List一些方法
- IDEA 2017破解 license server激活
- bat批处理之清理系统垃圾
- php生成流水号,生成唯一流水号
- TWebLive基于TRTC和IM实现web群直播
- 如何设置显示网络计算机,如何在台式计算机上设置无线局域网络
- 2019年年终总结~平淡生活
- Linux之计划任务与系统安全(cron周期性计划任务)
- 5500xt挖矿算力_(视频)静态计算 RTX 3080 的以太坊挖矿回本周期 白露矿业报告 (20.09.19)...
- 4-3指令系统-CISC和RISC
- 系统DIY:雨林木风YlmF系统DIY Y1.5(转)