python装饰器的应用案例
2023-09-14 09:00:35 时间
目录
一、过程编程
二、面向装饰器和函数的编程
三、二的加强版
一、过程编程
(一)需求:打印菱形
1、空格、*号组成的菱形
2、输入菱形上半部分的行数即可打印
3、支持循环输入
(二)代码
from sys import stdout while True: # n = 3 num_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 stdout def forever(fun): def inner(): print("循环") while True: # nonlocal n n = input("请输入菱形上部的正三角的行数:") if n == "q" or n == "exit": print("程序已退出!") break fun(n) return inner def 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 stdout def 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("程序已退出!") break fun(n) else: print("参数多了") break else: n = input("请输入菱形上部的正三角的行数:") if n == "q" or n == "exit": print("程序已退出!") break fun(n) return inner def 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)
其他;
一个已经存在 10 年,却被严重低估的库
https://mp.weixin.qq.com/s/oEc_m1_-hrRt1oYjvSfm8g
恶补了 Python 装饰器的六种写法,你随便问~
相关文章
- Python Django开发案例:GET方式实现登录功能
- Python之pandas:特征工程中数据类型(object/category/bool/int32/int64/float64)的简介、数据类型转换四大方法、案例应用之详细攻略
- Python语言学习:Python语言学习之函数(定义&调用函数/常用内置函数如filter&map/内嵌函数/闭包/匿名函数如lambda&map)的简介、案例应用之详细攻略
- Python编程语言学习:python中与数字相关的函数(取整等)、案例应用之详细攻略
- Python编程语言学习:python的列表的特殊应用之一行命令实现if判断中的两类判断
- Python语言学习:Python语言学习之正则表达式相关(re正则表达式库)的简介、常用函数、案例应用之详细攻略
- Python语言学习:Python语言学习之正则表达式相关(re正则表达式库)的简介、常用函数、案例应用之详细攻略
- Python语言学习:Python语言学习之程序打包发布(exe/msi等)&如何将自己的Python项目(自定义程序代码库)发布到PyPI全流程的简介、案例应用之详细攻略
- Python语言学习:Python语言学习之python包/库package的简介(模块的封装/模块路径搜索/模块导入方法/自定义导入模块实现华氏-摄氏温度转换案例应用)、使用方法、管理工具之详细攻略
- Python编程语言学习:python中浅复制/深复制(或浅拷贝/深拷贝)的简介、案例应用注意事项之详细攻略
- Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Entry/Entry的Command)
- Python:利用python编程实现三维图像绘制展示(六面体旋转、三维球柱状体、下雪场景等)
- Python之pandas:pandas中数据处理常用函数(与空值相关/去重和替代)简介、具体案例、使用方法之详细攻略
- Python语言学习:复杂函数(yield/@property)使用方法、案例应用之详细攻略
- Python语言学习之文件夹那些事:python和文件夹的使用方法之详细攻略
- python毕设案例教学: 基于数据挖掘在京东客户评价方面的研究与应用
- 用生动的案例一步步带你学会python多线程模块
- 实战案例!使用 Python 进行 RFM 客户价值分析!
- Python编程:查看python语法中的关键字keyword
- 弄清楚这27个为什么,让你学习Python更简单!
- Python Unittest 单元测试案例