Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。模块让你能够有逻辑地组织你的Python代码段。把相关的代码分配到一个模块里能让你的代码更好用,更易懂。模块能定义函数,类和变量,模块里也能包含可执行的代码。

导入模块

  在其他需要这些功能的文件中,导入这模块,就可重用这些函数和变量。一般用module_name.fun_name,和module_name.var_name进行使用。这样的语义用法使模块看起来很像类或者名字空间,可将module_name 理解为名字限定符。模块名就是文件名去掉.py后缀。导入模块的方式有如下几种:

1). import PackageA.SubPackageA.ModuleA            #使用时必须用全路径名

2). from PackageA.SubPackageA import ModuleA         #以直接使用模块名而不用加上包前缀。

3). from PackageA.SubPackageA.ModuleA import functionA    #直接导入模块中的函数或变量

(1)当使用import item.subitem.subsubitem语法时,最后一个item之前的item必须是包,最后一个item可以是一个模块或包,但不能是类、函数和变量;

(2)当使用from package import item时,item可以是package的子模块或子包,或是其他的定义在包中的名字(比如一个函数、类或变量);首先检查item是否定义在包中,不过没找到,就认为item是一个模块并尝试加载它,失败时会抛出一个ImportError异常。

(3)当使用from pacakge import *时,如果包的__init__.py定义了一个名为__all__的列表变量,它包含的模块名字的列表将作为被导入的模块列表。如果没有定义__all__, 这条语句不会导入所有的package的子模块,它只保证包package被导入,然后导入定义在包中的所有名字。包是一个有层次的文件目录结构,它定义了由n个模块或n个子包组成的python应用程序执行环境。

  下面就通过Pycharm先建立一个目录modules,再建立一个python包main,最后创建一个client..py的文件。创建包文件main时工具会自动创建一个___init__.py的python文件,简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以为空。__int__.py用于标识当前文件夹是一个包。

__init__.py
if __name__ == '__main__':
   pass
def hello():
   print 'hello,this is a test file'
def name():
   print __name__
def sum(a,b):
   print a+b
def Max(li):
   li.sort()
   print 'Max is %d' %li[-1]
client.py
print '*****import module1[, module2[,... moduleN]*****'
import __init__
__init__.hello()
print '*****from modname import name1[, name2[, ... nameN]]*****'
from __init__ import hello
hello()
print '#####from modname import *#####'
from __init__ import *
name()
sum(1,2)
Max(li=[12,23,32,1,4,6])

运行结果:
*****import module1[, module2[,... moduleN]*****
hello,this is a test file
*****from modname import name1[, name2[, ... nameN]]*****
hello,this is a test file
#####from modname import *#####
__init__
3
Max is 32

  当你导入一个模块,Python 解析器对模块位置的搜索顺序是:

  • 1、当前目录

  • 2、如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。

  • 3、如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。

  模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

  不用import就可以直接使用的常用内置函数:

help(obj) 在线帮助, obj可是任何类型
callable(obj)  查看一个obj是不是可以像函数一样调用 
repr(obj) 得到obj的表示字符串,可以利用这个字符串eval重建该对象的一个拷贝  
eval_r(str) 表示合法的python表达式,返回这个表达式  
dir(obj)     查看obj的name space中可见的name
hasattr(obj,name) 查看一个obj的name space中是否有name    
getattr(obj,name) 得到一个obj的name space中的一个name  
setattr(obj,name,value) 为一个obj的name   
space其中的一个name指向vale这个object    
delattr(obj,name) 从obj的name space中删除一个name
vars(obj) 返回一个object的name space。用dictionary表示
delattr(obj,name) 从obj的name space中删除一个name
 globals() 返回一个全局name space,用dictionary表示
type(obj)  查看一个obj的类型   
isinstance(obj,cls) 查看obj是不是cls的instance    
issubclass(subcls,supcls) 查看subcls是不是supcls的子类  

##################    类型转换  ##################

chr(i) 把一个ASCII数值,变成字符    

ord(i) 把一个字符或者unicode字符,变成ASCII数值    

oct(x) 把整数x变成八进制表示的字符串    

hex(x) 把整数x变成十六进制表示的字符串    

str(obj) 得到obj的字符串描述    

list(seq) 把一个sequence转换成一个list    

tuple(seq) 把一个sequence转换成一个tuple    

dict(),dict(list) 转换成一个dictionary    

int(x) 转换成一个integer    

long(x) 转换成一个long interger    

float(x) 转换成一个浮点数    

complex(x) 转换成复数    

max(...) 求最大值    

min(...) 求最小值  

日期时间模块datetime

  datetime是Python处理日期和时间的标准库。

import datetime
_now=datetime.datetime.now()
print _now
print type(_now)
from datetime import datetime
now=datetime.now()
print now
print type(now)

运行结果:
2017-11-09 17:29:04.976000
<type 'datetime.datetime'>
2017-11-09 17:29:04.976000
<type 'datetime.datetime'>

  从程序中可以看出datetime是模块,datetime模块还包含一个datetime类,通过from datetime import datetime导入的才是datetime这个类。如果仅导入import datetime,则必须引用全名datetime.datetime。datetime.now()返回当前日期和时间,其类型是datetime。

  python 中 time 有三种格式:float,struct tuple(time.struct_time 或 datetime.datetime),str

from datetime import datetime
import time
print '#####timestamp时间戳#####'
t1=time.time()
print t1
print type(t1)
print '#####time tuple时间元组#####'
t2=time.localtime()
print type(t2)
print '#####string字符串#####'
t3=datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print t3
print type(t3)

运行结果:
#####timestamp时间戳#####
1510219689.67
<type 'float'>
#####time tuple时间元组#####
<type 'time.struct_time'>
#####string字符串#####
2017-11-09 17:28:09
<type 'str'>

常用的类型转换:

float --> struct tuple:   time.localtime( float )

struct time tuple --> str: time.strftime(format, struct time tuple)

str --> struct time tuple: time.strptime(str, format)

struct time tuple --> float : time.mktime(struct time tuple)

struct time tuple --> datetime: datetime(*time_tuple[0:6])

float --> datetime: datetime.datetime.fromtimestamp( float )

datetime --> struct time tuple: datetime.timetuple()

from datetime import datetime
import time
print '#####float --> struct tuple'
t0=time.localtime()
t1=datetime.now().timetuple()
print t0,type(t0)
print t1,type(t1)
print '#####datetime --> str'
t2=datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print t2,type(t2)
print '#####str --> datetime'
t3=datetime.now().strptime('2017-11-11','%Y-%m-%d')
print t3,type(t3)
print '#####struct time tuple --> float '
t4=time.mktime(time.localtime())
print t4,type(t4)
print '#####struct time tuple --> datetime'
t5=datetime(2017,11,11)
print t5,type(t5)
print '#####float --> datetime'
t6=datetime.fromtimestamp(time.time())
print t6,type(t6)
print '#####datetime --> struct time tuple'
t7=datetime.timetuple(datetime.now())
print t7,type(t7)

运行结果:
#####float --> struct tuple
time.struct_time(tm_year=2017, tm_mon=11, tm_mday=9, tm_hour=17, tm_min=16, tm_sec=59, tm_wday=3, tm_yday=313, tm_isdst=0) <type 'time.struct_time'>
time.struct_time(tm_year=2017, tm_mon=11, tm_mday=9, tm_hour=17, tm_min=16, tm_sec=59, tm_wday=3, tm_yday=313, tm_isdst=-1) <type 'time.struct_time'>
#####datetime --> str
2017-11-09 17:16:59 <type 'str'>
#####str --> datetime
2017-11-11 00:00:00 <type 'datetime.datetime'>
#####struct time tuple --> float
1510219019.0 <type 'float'>
#####struct time tuple --> datetime
2017-11-11 00:00:00 <type 'datetime.datetime'>
#####float --> datetime
2017-11-09 17:16:59.269000 <type 'datetime.datetime'>
#####datetime --> struct time tuple
time.struct_time(tm_year=2017, tm_mon=11, tm_mday=9, tm_hour=17, tm_min=16, tm_sec=59, tm_wday=3, tm_yday=313, tm_isdst=-1) <type 'time.struct_time'>

  python中时间日期格式化符号:

%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示

%j 

年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身