python装饰器的应用案例
目录
一、过程编程
二、面向装饰器和函数的编程
三、二的加强版
一、过程编程
(一)需求:打印菱形
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)
python装饰器的应用案例的更多相关文章
- Python装饰器使用规范案例详解
由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数. >>> def now(): ... print('2015-3-25') ... >> ...
- Python装饰器由浅入深
装饰器的功能在很多语言中都有,名字也不尽相同,其实它体现的是一种设计模式,强调的是开放封闭原则,更多的用于后期功能升级而不是编写新的代码.装饰器不光能装饰函数,也能装饰其他的对象,比如类,但通常,我们 ...
- 关于python装饰器
关于python装饰器,不是系统的介绍,只是说一下某些问题 1 首先了解变量作用于非常重要 2 其次要了解闭包 def logger(func): def inner(*args, **kwargs) ...
- python装饰器通俗易懂的解释!
1.python装饰器 刚刚接触python的装饰器,简直懵逼了,直接不懂什么意思啊有木有,自己都忘了走了多少遍Debug,查了多少遍资料,猜有点点开始明白了.总结了一下解释得比较好的,通俗易懂的来说 ...
- Python 装饰器学习
Python装饰器学习(九步入门) 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- c ...
- python 装饰器修改调整函数参数
简单记录一下利用python装饰器来调整函数的方法.现在有个需求:参数line范围为1-16,要求把9-16的范围转化为1-8,即9对应1,10对应2,...,16对应8. 下面是例子: def fo ...
- python 装饰器学习(decorator)
最近看到有个装饰器的例子,没看懂, #!/usr/bin/python class decorator(object): def __init__(self,f): print "initi ...
- Python装饰器详解
python中的装饰器是一个用得非常多的东西,我们可以把一些特定的方法.通用的方法写成一个个装饰器,这就为调用这些方法提供一个非常大的便利,如此提高我们代码的可读性以及简洁性,以及可扩展性. 在学习p ...
- 关于python装饰器(Decorators)最底层理解的一句话
一个decorator只是一个带有一个函数作为参数并返回一个替换函数的闭包. http://www.xxx.com/html/2016/pythonhexinbiancheng_0718/1044.h ...
随机推荐
- asp.net线程批量导入数据时通过ajax获取执行状态
最近因为工作中遇到一个需求,需要做了一个批量导入功能,但长时间运行没个反馈状态,很容易让人看了心急,产生各种臆想!为了解决心里障碍,写了这么个功能. 通过线程执行导入,并把正在执行的状态存入sessi ...
- HEVC 有损优化一
前期通过X86汇编和C的优化,HEVC 编码有了大幅的提升,目前320x240可以到4~5 fps 了.从现在开始无损优化先放放(还有很大的优化空间),开始做有损优化.做有损优化,我们设定的前提是ps ...
- Cocos2d-x3.0终于版Mac以及Win系统相关环境部署
因个人原因此博客停止更新,其它更新博文将在该博客继续更新. http://blog.csdn.net/xiaohan_aimti/article/details/24653831 就在前几天,2014 ...
- Maven------电脑安装Maven
转载: http://blog.csdn.net/jiuqiyuliang/article/details/45390313 注意:修改本地仓库路径时,<localRepository>D ...
- python常用BIF汇总
append():在列表末尾增加一个数据项:例如a.append('hello') pop():用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值:例如a.pop() extend(): ...
- 棒谷科技java岗笔试题与初试题
选择题 1.银行家算法的作用 2.docker镜像结构 3.docker的默认网络模式 4.spring的动态代理效率比较 5.springboot默认的json 6.springboot多profi ...
- help()
help() 用于查看函数或模块的帮助信息 In [1]: help(id) # 查看id()这个函数的帮助信息,注意不要写成help(id()) id(...) id(object) -> i ...
- Python 使用正则表达式匹配URL网址
使用正则表达式匹配以 .com 或 .cn 为域名后缀的URL地址 In [1]: import re In [2]: str = "http://www.baidu.com/" ...
- FastCGI中fastcgi_param 详细说明
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#脚本文件请求的路径 fastcgi_param QUERY ...
- OpenStack Cinder 与各种后端存储技术的集成叙述与实践
先说下下loop设备 loop设备及losetup命令介绍 1. loop设备介绍 在类 UNIX 系统里,loop 设备是一种伪设备(pseudo-device),或者也可以说是仿真设备.它能使我们 ...