python装饰器的应用案例
目录
一、过程编程
二、面向装饰器和函数的编程
三、二的加强版
一、过程编程
(一)需求:打印菱形
1、空格、*号组成的菱形
2、输入菱形上半部分的行数即可打印
3、支持循环输入
(二)代码
from sys import stdoutwhile True:# n = 3num_str = input("请输入菱形上部的正三角的行数:")if num_str.isdigit(): # 判断字符串是否为纯整数字组成n = int(num_str)for i in range(1, n + 1):for j in range(1, n - i + 1):stdout.write(' ')for k in range(1, 2 * i - 1 + 1):stdout.write('*')print()for i in range(1, n - 1 + 1):for j in range(1, i + 1):stdout.write(' ')for k in range(1, 2 * (n - i) - 1 + 1):stdout.write('*')print()else:print("请输入整数!!!")
二、面向装饰器和函数的编程
(一)需求:打印菱形
1、空格、*号组成的菱形
2、输入菱形上半部分的行数即可打印。
3、支持循环输入
4、输入“q”、“exit”可以退出循环
(二)代码
简单的分析:
1、打印菱形:print_diamond(n)
2、验证输入是否是合法数字:@verify_number
3、永循环和n输入:@forever
这3层逻辑,分离开来。
from sys import stdoutdef forever(fun):def inner():print("循环")while True:# nonlocal nn = input("请输入菱形上部的正三角的行数:")if n == "q" or n == "exit":print("程序已退出!")breakfun(n)return innerdef verify_number(fun):def inner(n):print("验证输入的有效性")if isinstance(n, int) or n.isdigit(): # 判断字符串是否为纯整数字组成n = int(n)fun(n)else:print("请输入整数!!!")return inner@forever
@verify_number
def print_diamond(n):for i in range(1, n + 1):for j in range(1, n - i + 1):stdout.write(' ')for k in range(1, 2 * i - 1 + 1):stdout.write('*')print()for i in range(1, n - 1 + 1):for j in range(1, i + 1):stdout.write(' ')for k in range(1, 2 * (n - i) - 1 + 1):stdout.write('*')print()print_diamond()
三、二的加强版
from sys import stdoutdef forever(fun):def inner(*args, **kwargs):print("循环")while True:if len(args):if len(args) == 1:n = args[0] # 获取第一个位置参数args = () # 清空,避免重复循环if n == "q" or n == "exit":print("程序已退出!")breakfun(n)else:print("参数多了")breakelse:n = input("请输入菱形上部的正三角的行数:")if n == "q" or n == "exit":print("程序已退出!")breakfun(n)return innerdef verify_number(fun):def inner(n):print("验证输入的有效性")if isinstance(n, int) or n.isdigit(): # 判断字符串是否为纯整数字组成n = int(n)fun(n)else:print("请输入整数!!!")return inner@forever
@verify_number
def print_diamond(n):for i in range(1, n + 1):for j in range(1, n - i + 1):stdout.write(' ')for k in range(1, 2 * i - 1 + 1):stdout.write('*')print()for i in range(1, n - 1 + 1):for j in range(1, i + 1):stdout.write(' ')for k in range(1, 2 * (n - i) - 1 + 1):stdout.write('*')print()print_diamond(4)
转载于:https://www.cnblogs.com/andy9468/p/9844282.html
python装饰器的应用案例相关推荐
- python装饰器-python装饰器是哪个版本支持的
python装饰器是哪个版本支持的 **kwargs): print ' % (unction.__name__:@app.route(':import unctoolsde log(text=&am ...
- python lock_python lock一步步教你理解Python装饰器
请仔细看我们的decorator实例.我们定义了一个接受单个参数some_func的名为outer的函数.在outer内部我们定义了一个名为inner的嵌套函数.inner函数打印一个字符串然后调用s ...
- python 装饰器装饰类_5分钟的Python装饰器指南
python 装饰器装饰类 重点 (Top highlight) There's no doubt that Python decorators are one of the more advance ...
- Python 装饰器详解(下)
Python 装饰器详解(下) 转自:https://blog.csdn.net/qq_27825451/article/details/84627016,博主仅对其中 demo 实现中不适合pyth ...
- python装饰器由浅入深_详解Python装饰器由浅入深
装饰器的功能在很多语言中都有,名字也不尽相同,其实它体现的是一种设计模式,强调的是开放封闭原则,更多的用于后期功能升级而不是编写新的代码.装饰器不光能装饰函数,也能装饰其他的对象,比如类,但通常,我们 ...
- Python装饰器详解,详细介绍它的应用场景
装饰器的应用场景 附加功能 数据的清理或添加: 函数参数类型验证 @require_ints 类似请求前拦截 数据格式转换 将函数返回字典改为 JSON/YAML 类似响应后篡改 为函数提供额外的数据 ...
- 通过 Python 装饰器实现DRY(不重复代码)原
通过 Python 装饰器实现DRY(不重复代码)原 Python装饰器是一个消除冗余的强大工具.随着将功能模块化为大小合适的方法,即使是最复杂的工作流,装饰器也能使它变成简洁的功能. 例如让我们看看 ...
- 通过 Python 装饰器实现DRY(不重复代码)原则
通过 Python 装饰器实现DRY(不重复代码)原则 英文原文:DRY Principles through Python Decorators Python装饰器是一个消除冗余的强大工具.随着将功 ...
- [转载] python 装饰器
参考链接: Python装饰器 因为Odoo里有大量的装饰器,所以决定把这个理得清晰一些. 装饰模式 23种设计模式之一,英文叫Decorator Pattern,又叫装饰者模式.装饰模式是在不必改变 ...
- 如何理解python装饰器
如何理解python装饰器 @(Python学习-随手记)[Decorator, 帮助] 装饰器简介 装饰器decorator是一种高级python语法,可以对函数.方法.类进行加工. 装饰器常用场景 ...
最新文章
- python获取系统时间函数_python3中datetime库,time库以及pandas中的时间函数区别与详解...
- python内置函数中的 IO文件系列 open和os
- python 面向对象编程:类和实例
- 多生产者_通知:生产者补贴!打卡时间!定了
- jquery中$.each循环的跳出
- silverlight经典案例
- Delphi7中默认没有安装的官方控件
- Redis命令 - sortedSet
- 车路协同 智能路侧决策系统总体架构及应用
- MySQL 数据库备份与还原
- 网络子系统32_网桥设备的开启与关闭
- python:16进制转2进制
- 通过IMAP方式迁移U-Mail邮件到Exchange 2013之Exchange 2007 升级到Exchange 2013!
- 网页上传文件获取地址的问题
- POJ_1564_dfs
- 给初学者的RxJava2.0教程(八)
- 音视频开发大厂面试题(快手、百度、字节)
- 计算机上的be无法正常启动,应用程序无法正常启动0xc0000005的三种解决方法
- Apple Pay入门
- 图像处理:利用相似度处理相似度较大的图像