python-python基础5

一、模块介绍

定义:本质上就是.py结尾的python文件。模块,用一砣代码实现了某个功能的代码集合。 

类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。

导入模块:

import 本质就是把python文件解释一遍。例如 import test,就是把test里的所有代码赋值给test这个变量,所以在其它地方调用test就需要test.xxx来调用。

而from test import *这种方式,是直接执行test里面的所有代码,调用可以直接xxx.

from...import...与import语句基本一致,唯一不同的是:使用import foo导入模块后,引用模块中的名字都需要加上foo.作为前缀,而使用from foo import x,get,change,Foo则可以在当前执行文件中直接引用模块foo中的名字,如下

from foo import x,get,change #将模块foo中的x和get导入到当前名称空间
a=x #直接使用模块foo中的x赋值给a
get() #直接执行foo中的get函数
change() #即便是当前有重名的x,修改的仍然是源文件中的x

无需加前缀的好处是使得我们的代码更加简洁,坏处则是容易与当前名称空间中的名字冲突,如果当前名称空间存在相同的名字,则后定义的名字会覆盖之前定义的名字。

查看导入模块的搜索路径:sys.path,如果不是python自带的模块,一般只会找同级目录下的模块,如果需要导入其它目录下的模块,要把那个模块所在的上级目录给追加进sys.path里。例:

p=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(p)

如果导入的是包,那么就是执行包下面的__init__文件。

如果想要导入某个包里的一个模块,可以在那个包中的__init__.py文件中写from . import xxx,导入xxx模块

我们还可以在当前位置为导入的模块起一个别名

import foo as f #为导入的模块foo在当前位置起别名f,以后再使用时就用这个别名f
f.x
f.get()

还可以为导入的一个名字起别名

from foo import get as get_x
get_x()

通常在被导入的名字过长时采用起别名的方式来精简代码,另外为被导入的名字起别名可以很好地避免与当前名字发生冲突,还有很重要的一点就是:可以保持调用方式的一致性,例如我们有两个模块json和pickle同时实现了load方法,作用是从一个打开的文件中解析出结构化的数据,但解析的格式不同,可以用下述代码有选择性地加载不同的模块

if data_format == 'json':
    import json as serialize #如果数据格式是json,那么导入json模块并命名为serialize
elif data_format == 'pickle':
    import pickle as serialize #如果数据格式是pickle,那么导入pickle模块并命名为serialize

data=serialize.load(fn) #最终调用的方式是一致的

模块的分类

模块分为三种:

  • 自定义模块
  • 内置标准模块(又称标准库)
  • 开源模块

二、time & datetime模块

time模块

在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素。由于Python的time模块实现主要调用C库,所以各个平台可能有所不同。

1.以元组方式返回本地当前时间
>>> time.localtime()
time.struct_time(tm_year=2017, tm_mon=5, tm_mday=8, tm_hour=16, tm_min=13, tm_sec=34, tm_wday=0, tm_yday=128, tm_isdst=0)

2.以元组方式返回格林威治时间
>>> time.gmtime()   
time.struct_time(tm_year=2017, tm_mon=5, tm_mday=8, tm_hour=8, tm_min=13, tm_sec=38, tm_wday=0, tm_yday=128, tm_isdst=0)

3.将元组时间转换为时间戳
>>> x = time.localtime()
>>> time.mktime(x)
1494232890.0

4.将元组时间转换为字符串格式时间
>>> x = time.localtime()
>>> time.strftime('%Y-%m-%d %H:%M:%S',x)
'2017-05-08 16:57:38'

5.将字符串格式时间转换为元组格式时间
>>> time.strptime('2017-05-08 17:03:12','%Y-%m-%d %H:%M:%S')
time.struct_time(tm_year=2017, tm_mon=5, tm_mday=8, tm_hour=17, tm_min=3, tm_sec=12, tm_wday=0, tm_yday=128, tm_isdst=-1)

6.元组格式时间转换为字符串格式时间
>>> time.asctime()
'Tue May  9 15:23:21 2017'
>>> x = time.localtime()
>>> time.asctime(x)
'Tue May  9 15:23:39 2017'

7.时间戳转换成字符串格式时间
>>> time.ctime()
'Tue May  9 16:07:24 2017'
>>> time.ctime(987867475)
'Sat Apr 21 23:37:55 2001'

格式参照:

字符串 功能
%a 本地(locale)简化星期名称
%A 本地完整星期名称
%b 本地简化月份名称
%B 本地完整月份名称
%c 本地相应的日期和时间表示
%d 一个月中的第几天(01 - 31)
%H 一天中的第几个小时(24小时制,00 - 23)
%I 第几个小时(12小时制,01 - 12)
%j 一年中的第几天(001 - 366)
%m 月份(01 - 12)
%M 分钟数(00 - 59)
%p 本地am或者pm的相应符
%S 秒(01 - 61)
%w 一个星期中的第几天(0 - 6,0是星期天)
%W 和%U基本相同,不同的是%W以星期一为一个星期的开始。
%x 本地相应日期
%X 本地相应时间
%y 去掉世纪的年份(00 - 99)
%Y 完整的年份
%Z 时区的名字(如果不存在为空字符)
%% %’字符
%U 一年中的周数。(00 - 53,周日是一个周的开始。)第一个星期天之前的所有天数都放在第0周

time模块1.png

time模块2.png

datetime模块

import datetime
1.返回当前时间
>>> datetime.datetime.now()
datetime.datetime(2017, 5, 9, 17, 7, 0, 514481)

2.时间戳转换成日期
>>> datetime.date.fromtimestamp(1178766678)
datetime.date(2007, 5, 10)

3.当前时间+3天
>>> datetime.datetime.now() + datetime.timedelta(+3)
datetime.datetime(2017, 5, 12, 17, 12, 42, 124379)

4.当前时间-3天
>>> datetime.datetime.now() + datetime.timedelta(-3)
datetime.datetime(2017, 5, 6, 17, 13, 18, 474406)

5.当前时间+3小时
>>> datetime.datetime.now() + datetime.timedelta(hours=3)
datetime.datetime(2017, 5, 9, 20, 13, 55, 678310)

6.当前时间+30分钟
>>> datetime.datetime.now() + datetime.timedelta(minutes=30)
datetime.datetime(2017, 5, 9, 17, 44, 40, 392370)

猜你喜欢

转载自www.cnblogs.com/jehuzzh/p/12340022.html