我的第一个python web开发框架(10)——工具函数包说明(一)
2017-10-23 18:24
731 查看
PS:原先是想直接进入功能开发,要用到什么函数时再创建,这样也容易熟悉每个函数的由来和使用方法,但考虑到这样操作,到时会经常在不同文件间切换,不好描述,容易造成混乱,所以还是使用函数库这种方式来说明。
下面来说说工具函数包,如果想要快速学会一个新的框架,首先要做的事情就是熟悉工具函数包,一方面,能快速知道有哪些基本功能可以直接调用,不用重复造轮子;另一方面,查看项目代码时,会比较快的进入角色,能看明白很多代码是做什么用的,因为工具函数包被调用的机率是最大的。
那么怎么学习呢?当然是有节奏有计划的一步步深入了,我们可以从上到下逐个查看研究,通过查看代码,我们可以基本了解这个包有什么功能,但也仅仅是了解而已,想要真正掌握,必须要去使用它们,最直接的方法就是编写测试用例进行测试,这样就可以很快熟悉并掌握这些函数具体有什么功能与限制。
PS:大家在学习工具函数,或其他封装好的类或函数时,在开始时不需要去知道它里面每一行代码是做什么用的,为什么要那么写,只需要知道输入什么参数会得出什么值就可以了,这就是大家所说的封装。我们要开汽车,不需要知道它是怎么造出来的,发动机是怎么运行的,只需要知道怎么操作(接口)就可以了。
我以前遇到过几位爱钻牛角尖的开发者,想弄明白每一行代码为什么要那样写,当那一行所调用的函数看不懂时,就会再深入一层,看看它更底层是什么原理......就这样,一般人用几分钟就可以知道怎么用的,他花几天也弄不明白,花了好长时间也没法写代码。对于初学者来说,学习一个函数怎么使用,不要钻牛角尖,去研究它的内部是怎么运行的,要研究也要等到你以后精通了再说,不然你看到一个函数就去看它的源码,然后源码中又会调用其他库的源码,其他库的源码又会调用python的内核代码,难道你要搞定python的内核代码后才可以开始开发吗?你能搞的定python内核你就是超级大牛了,可以自己开发一种新语言出来了。
所以说想要快速学习,最好的办法就是知道这个封装好的函数是干嘛的,它需要输入什么参数,会返回什么内容就已经够了。而最快的熟悉方法就是写单元测试,用你能想到的办法去测试,这样就知道什么时候出错,什么时候正常。
熟悉相关工具函数:
convert_helper.py是类型转换包,所有字符串转数值、字符串转日期、字符串日期转时间戳等各种类型转换函数,都可以放到这里来。
View Code
timedelta()函数,它主要用于时间的加减运算,可以得出加减几秒、几分、几小时、几日、几周、几月、几年后的时间值是什么,这个函数在实际开发中使用频率还算是挺高的。
PS:原datetime.timedelta函数没有对年和月的加减运算,对这个我进行了扩展,增加了年和月的加减计算
运行后打印到控制台上的值:
本文对应的源码下载
版权声明:本文原创发表于 博客园,作者为 AllEmpty 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
python开发QQ群:669058475 作者博客:http://www.cnblogs.com/EmptyFS/
下面来说说工具函数包,如果想要快速学会一个新的框架,首先要做的事情就是熟悉工具函数包,一方面,能快速知道有哪些基本功能可以直接调用,不用重复造轮子;另一方面,查看项目代码时,会比较快的进入角色,能看明白很多代码是做什么用的,因为工具函数包被调用的机率是最大的。
那么怎么学习呢?当然是有节奏有计划的一步步深入了,我们可以从上到下逐个查看研究,通过查看代码,我们可以基本了解这个包有什么功能,但也仅仅是了解而已,想要真正掌握,必须要去使用它们,最直接的方法就是编写测试用例进行测试,这样就可以很快熟悉并掌握这些函数具体有什么功能与限制。
PS:大家在学习工具函数,或其他封装好的类或函数时,在开始时不需要去知道它里面每一行代码是做什么用的,为什么要那么写,只需要知道输入什么参数会得出什么值就可以了,这就是大家所说的封装。我们要开汽车,不需要知道它是怎么造出来的,发动机是怎么运行的,只需要知道怎么操作(接口)就可以了。
我以前遇到过几位爱钻牛角尖的开发者,想弄明白每一行代码为什么要那样写,当那一行所调用的函数看不懂时,就会再深入一层,看看它更底层是什么原理......就这样,一般人用几分钟就可以知道怎么用的,他花几天也弄不明白,花了好长时间也没法写代码。对于初学者来说,学习一个函数怎么使用,不要钻牛角尖,去研究它的内部是怎么运行的,要研究也要等到你以后精通了再说,不然你看到一个函数就去看它的源码,然后源码中又会调用其他库的源码,其他库的源码又会调用python的内核代码,难道你要搞定python的内核代码后才可以开始开发吗?你能搞的定python内核你就是超级大牛了,可以自己开发一种新语言出来了。
所以说想要快速学习,最好的办法就是知道这个封装好的函数是干嘛的,它需要输入什么参数,会返回什么内容就已经够了。而最快的熟悉方法就是写单元测试,用你能想到的办法去测试,这样就知道什么时候出错,什么时候正常。
熟悉相关工具函数:
convert_helper.py是类型转换包,所有字符串转数值、字符串转日期、字符串日期转时间戳等各种类型转换函数,都可以放到这里来。
def timedelta(sign, dt, value): """ 对指定时间进行加减运算,几秒、几分、几小时、几日、几周、几月、几年 sign: y = 年, m = 月, w = 周, d = 日, h = 时, n = 分钟, s = 秒 dt: 日期,只能是datetime或datetime.date类型 value: 加减的数值 return: 返回运算后的datetime类型值 """ if not isinstance(dt, datetime.datetime) and not isinstance(dt, datetime.date): raise Exception("日期类型错误") if sign == 'y': year = dt.year + value if isinstance(dt, datetime.date): return datetime.datetime(year, dt.month, dt.day) elif isinstance(dt, datetime.datetime): return datetime.datetime(year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.microsecond) else: return None elif sign == 'm': year = dt.year month = dt.month + value ### 如果月份加减后超出范围,则需要计算一下,对年份进行处理 ### # 如果月份加减后等于0时,需要特殊处理一下 if month == 0: year = year - 1 month = 12 else: # 对年月进行处理 year = year + month // 12 month = month % 12 if isinstance(dt, datetime.date): return datetime.datetime(year, month, dt.day) elif isinstance(dt, datetime.datetime): return datetime.datetime(year, month, dt.day, dt.hour, dt.minute, dt.second, dt.microsecond) else: return None elif sign == 'w': delta = datetime.timedelta(weeks=value) elif sign == 'd': delta = datetime.timedelta(days=value) elif sign == 'h': delta = datetime.timedelta(hours=value) elif sign == 'n': delta = datetime.timedelta(minutes=value) elif sign == 's': delta = datetime.timedelta(seconds=value) else: return None return dt + delta
View Code
timedelta()函数,它主要用于时间的加减运算,可以得出加减几秒、几分、几小时、几日、几周、几月、几年后的时间值是什么,这个函数在实际开发中使用频率还算是挺高的。
PS:原datetime.timedelta函数没有对年和月的加减运算,对这个我进行了扩展,增加了年和月的加减计算
def test_timedelta(self): print('---test_timedelta---') result = datetime.datetime(2018, 9, 1) print(result) self.assertEqual(datetime_helper.timedelta('y', datetime.datetime(2017, 9, 1), 1), result) result = datetime.datetime(2016, 9, 1) print(result) self.assertEqual(datetime_helper.timedelta('y', datetime.datetime(2017, 9, 1), -1), result) result = datetime.datetime(2018, 3, 1) print(result) self.assertEqual(datetime_helper.timedelta('m', datetime.datetime(2017, 9, 1), 6), result) result = datetime.datetime(2017, 3, 1) print(result) self.assertEqual(datetime_helper.timedelta('m', datetime.datetime(2017, 9, 1), -6), result) result = datetime.datetime(2017, 3, 1) print(result) self.assertEqual(datetime_helper.timedelta('m', datetime.datetime(2017, 9, 1), -6), result) result = datetime.datetime(2017, 9, 8) print(result) self.assertEqual(datetime_helper.timedelta('w', datetime.datetime(2017, 9, 1), 1), result) result = datetime.datetime(2017, 8, 25) print(result) self.assertEqual(datetime_helper.timedelta('w', datetime.datetime(2017, 9, 1), -1), result) result = datetime.datetime(2017, 9, 2) print(result) self.assertEqual(datetime_helper.timedelta('d', datetime.datetime(2017, 9, 1), 1), result) result = datetime.datetime(2017, 8, 31) print(result) self.assertEqual(datetime_helper.timedelta('d', datetime.datetime(2017, 9, 1), -1), result) result = datetime.datetime(2017, 9, 1, 1) print(result) self.assertEqual(datetime_helper.timedelta('h', datetime.datetime(2017, 9, 1), 1), result) result = datetime.datetime(2017, 8, 31, 23) print(result) self.assertEqual(datetime_helper.timedelta('h', datetime.datetime(2017, 9, 1), -1), result) result = datetime.datetime(2017, 9, 1, 0, 1) print(result) self.assertEqual(datetime_helper.timedelta('n', datetime.datetime(2017, 9, 1), 1), result) result = datetime.datetime(2017, 8, 31, 23, 59) print(result) self.assertEqual(datetime_helper.timedelta('n', datetime.datetime(2017, 9, 1), -1), result) result = datetime.datetime(2017, 9, 1, 0, 0, 1) print(result) self.assertEqual(datetime_helper.timedelta('s', datetime.datetime(2017, 9, 1), 1), result) result = datetime.datetime(2017, 8, 31, 23, 59, 59) print(result) self.assertEqual(datetime_helper.timedelta('s', datetime.datetime(2017, 9, 1), -1), result)
运行后打印到控制台上的值:
------ini------ ---test_timedelta--- 2018-09-01 00:00:00 2016-09-01 00:00:00 2018-03-01 00:00:00 2017-03-01 00:00:00 2017-03-01 00:00:00 2017-09-08 00:00:00 2017-08-25 00:00:00 2017-09-02 00:00:00 2017-08-31 00:00:00 2017-09-01 01:00:00 2017-08-31 23:00:00 2017-09-01 00:01:00 2017-08-31 23:59:00 2017-09-01 00:00:01 2017-08-31 23:59:59 ------clear------
本文对应的源码下载
版权声明:本文原创发表于 博客园,作者为 AllEmpty 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
python开发QQ群:669058475 作者博客:http://www.cnblogs.com/EmptyFS/
相关文章推荐
- 我的第一个python web开发框架(11)——工具函数包说明(二)
- 我的第一个python web开发框架(12)——工具函数包说明(三)
- 我的第一个python web开发框架(13)——工具函数包说明(四)
- 我的第一个python web开发框架(9)——目录与配置说明
- 我的第一个python web开发框架(8)——项目结构与RESTful接口风格说明
- 我的第一个python web开发框架本地部署前端访问服务器
- 我的第一个python web开发框架(27)——定制ORM(三)
- 我的第一个python web开发框架(5)——开发前准备工作(了解编码前需要知道的一些常识)
- 我的第一个python web开发框架(31)——定制ORM(七)
- 我的第一个python web开发框架(32)——定制ORM(八)
- 我的第一个python web开发框架(17)——产品管理
- 我的第一个python web开发框架(28)——定制ORM(四)
- 我的第一个python web开发框架(29)——定制ORM(五)
- 10 个最好的用于 Web 开发的 Python 框架
- 我的第一个python web开发框架(19)——产品发布相关事项
- 我的第一个python web开发框架(20)——产品发布(部署到服务器)
- 我的第一个python web开发框架(18)——前台页面与接口整合
- 我的第一个python web开发框架(6)——第一个Hello World
- 我的第一个python web开发框架(2)——一个简单的小外包
- 我的第一个python web开发框架(16)——产品分类管理