首页 > 代码库 > python基础-模块

python基础-模块

一、模块介绍                                                                                                                                  

  Python Module(模块),就是一个保存了Python代码的文件。模块能定义函数,类和变量。模块里也能包含可执行的代码。

  文件名就是模块名加上后缀.py,在模块内部,模块名存储在全局变量__name__中,是一个string,可以直接在module中通过__name__引用到module name。

模块分为三种:

  • 自定义模块

  • 内置标准模块(又称标准库)

  • 开源模块

导入模块:

  • import: 使客户端(导入者)以一个整体获取一个模块。

  • from:容许客户端从一个模块文件中获取特定的变量名。

  • reload:在不中止Python程序的情况下,提供了一个重新载入模块文件代码的方法。

 

导入模块方法:

 1 语法:
 2 import module
 3 from module.xx.xx import xx     
 4 from module.xx.xx import xx as rename 
 5 from module.xx.xx import *            #一般不推荐使用
 6 
 7 
 8 示例:
 9 
10 推荐方法一11 
12 import cal   #当前目录直接调用模块
13 
14 from my_module import cal     #二层目录调用模块
15 
16 from web1,web2,web3 import cal      #多层目录调用模块
17 
18 推荐方法二:
19 from web1,web2,web3.cal import add
20 
21 
22 注意:不支持的调用方式
23 from web1.web2 import web3  #执行__init__文件,唯一不支持的调用方式
24 print(web3.cal.add(2,6))

模块路径:

 1 #获取路径
 2 import sys
 3 for i in sys.path:
 4     print(i)
 5 
 6 #输出结果:
 7 S:\Myproject
 8 S:\Python 3.5.1\python35.zip
 9 S:\Python 3.5.1\DLLs
10 S:\Python 3.5.1\lib                  #存放标准库
11 S:\Python 3.5.1
12 S:\Python 3.5.1\lib\site-packages    #存放第三方库,扩充库
13  
14 #添加路径
15 import sys
16 import os
17 pre_path = os.path.abspath(../)
18 sys.path.append(pre_path)

开源模块:

 1 #先安装 gcc 编译和 python 开发环境
 2 yum install gcc
 3 yum install python-devel
 4  5 apt-get python-dev
 6  
 7 #安装方式(安装成功后,模块会自动安装到 sys.path 中的某个目录中)
 8 yum
 9 pip
10 apt-get
11 ...
12 #进入python环境,导入模块检查是否安装成功                       

 

二、包(package)的概念                                                                                                                     

我们先设想一下,如果不同的人编写的模块名相同怎么办?为了避免冲突,Python又引进了按目录

来组织模块的方法,称为包(package)。

假设,如下图,我的两个time_file.py模块名字重名了,但是这两个模块的功能都不相同,如果这两个模块都在同一级目录中,那么我在其他地方要调用这个time_file.py模块,那么这个时候就会发生冲突,在这里我们就可以通过包来组织模块,避免冲突,

技术分享

方法是:选择一个顶层包名,引入包以后,只要顶层的包名不与别人冲突,那这个包里面的模块都不会与别人冲突了。

请注意:每个包目录下来都会有一个__init__.py的文件,这个文件必须是存在的,否则,Python就不把这个目录当成普通目录,而不是一个包,__init__.py可以是空文件,也可以有python代码,__init__.py本身就是一个文件,它的模块命就是对应的包名,它一般由于做接口文件。

 

三、time模块                                                                                                                                       

时间相关的操作,时间有三种表示方式:

时间戳           1970年1月1日之后的秒,即:time.time()
格式化的字符串    2016-12-12 10:10,  即:time.strftime(‘%Y-%m-%d‘)
结构化时间       元组                 即:time.struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)    即:time.localtime()
 1 import time
 2  
 3 # 1 time() :返回当前时间的时间戳
 4 time.time()  #1473525444.037215
 5  
 6 #----------------------------------------------------------
 7  
 8 # 2 localtime([secs])
 9 # 将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。
10 time.localtime() #time.struct_time(tm_year=2016, tm_mon=9, tm_mday=11, tm_hour=0,
11 # tm_min=38, tm_sec=39, tm_wday=6, tm_yday=255, tm_isdst=0)
12 time.localtime(1473525444.037215)
13  
14 #----------------------------------------------------------
15  
16 # 3 gmtime([secs]) 和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
17  
18 #----------------------------------------------------------
19  
20 # 4 mktime(t) : 将一个struct_time转化为时间戳。
21 print(time.mktime(time.localtime()))#1473525749.0
22  
23 #----------------------------------------------------------
24  
25 # 5 asctime([t]) : 把一个表示时间的元组或者struct_time表示为这种形式:‘Sun Jun 20 23:21:05 1993‘。
26 # 如果没有参数,将会将time.localtime()作为参数传入。
27 print(time.asctime())#Sun Sep 11 00:43:43 2016
28  
29 #----------------------------------------------------------
30  
31 # 6 ctime([secs]) : 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为
32 # None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。
33 print(time.ctime())  # Sun Sep 11 00:46:38 2016
34  
35 print(time.ctime(time.time()))  # Sun Sep 11 00:46:38 2016
36  
37 # 7 strftime(format[, t]) : 把一个代表时间的元组或者struct_time(如由time.localtime()和
38 # time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个
39 # 元素越界,ValueError的错误将会被抛出。
40 print(time.strftime("%Y-%m-%d %X", time.localtime()))#2016-09-11 00:49:56
41  
42 # 8 time.strptime(string[, format])
43 # 把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。
44 print(time.strptime(2011-05-05 16:37:06, %Y-%m-%d %X))
45  
46 #time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6,
47 #  tm_wday=3, tm_yday=125, tm_isdst=-1)
48  
49 #在这个函数中,format默认为:"%a %b %d %H:%M:%S %Y"。
50  
51  
52 # 9 sleep(secs)
53 # 线程推迟指定的时间运行,单位为秒。
54  
55 # 10 clock()
56 # 这个需要注意,在不同的系统上含义不同。在UNIX系统上,它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)。
57 # 而在WINDOWS中,第一次调用,返回的是进程运行的实际时间。而第二次之后的调用是自第一次调用以后到现在的运行
58 # 时间,即两次时间差。


技术分享
技术分享

示例:

技术分享
 1 import time
 2 
 3 print(time.time())       #1481556467.5820887  返回当前系统时间戳(1970年1月1日0时0分0秒开始)
 4 
 5 print(time.localtime())  #将时间戳转换为struct_time格式,返回本地时间
 6 #time.struct_time(tm_year=2016, tm_mon=12, tm_mday=12, tm_hour=23, tm_min=27, tm_sec=47, tm_wday=0, tm_yday=347, tm_isdst=0)
 7 
 8 print(time.gmtime())     #将时间戳转换为struct_time格式
 9 #time.struct_time(tm_year=2016, tm_mon=12, tm_mday=12, tm_hour=15, tm_min=27, tm_sec=47, tm_wday=0, tm_yday=347, tm_isdst=0)
10 
11 print(time.mktime(time.localtime()))  #1481556446.0  与time.localtime()功能相反,将struct_time格式转回成时间戳格式
12 
13 print(time.asctime())      #Mon Dec 12 23:26:24 2016
14 
15 print(time.ctime())        #Mon Dec 12 23:26:24 2016
16 
17 print(time.ctime(time.time()))    #Mon Dec 12 23:26:24 2016
18 
19 print(time.strftime("%Y-%m-%d %X",time.localtime()))   #2016-12-12 23:26:24
20 
21 print(time.strptime(2016-12-12 18:25:30,%Y-%m-%d %X))   #将字符串格式转换成struct_time格式
22 #time.struct_time(tm_year=2016, tm_mon=12, tm_mday=12, tm_hour=18, tm_min=25, tm_sec=30, tm_wday=0, tm_yday=347, tm_isdst=-1)
23 
24 #time.sleep(3)    #sleep停顿3分钟
View Code

 

查看帮助示例:

 1 import time
 2 help(time)
 3 
 4 
 5 Help on built-in module time:
 6 
 7 NAME
 8     time - This module provides various functions to manipulate time values.
 9 
10         Commonly used format codes:
11         
12         %Y  Year with century as a decimal number.
13         %m  Month as a decimal number [01,12].
14         %d  Day of the month as a decimal number [01,31].
15         %H  Hour (24-hour clock) as a decimal number [00,23].
16         %M  Minute as a decimal number [00,59].
17         %S  Second as a decimal number [00,61].
18         %z  Time zone offset from UTC.
19         %a  Locales abbreviated weekday name.
20         %A  Locales full weekday name.
21         %b  Locales abbreviated month name.
22         %B  Locales full month name.
23         %c  Locales appropriate date and time representation.
24         %I  Hour (12-hour clock) as a decimal number [01,12].
25         %p  Locales equivalent of either AM or PM.
26 
27 
28 import time
29 help(time.asctime)
30 
31 Help on built-in function asctime in module time:
32 
33 asctime(...)
34     asctime([tuple]) -> string
35     
36     Convert a time tuple to a string, e.g. Sat Jun 06 16:26:11 1998.
37     When the time tuple is not present, current time as returned by localtime()
38     is used.

 

四、random 模块                                                                                                                                                       

随机数:

 1 import random
 2  
 3 print(random.random())          #用于生成一个0到1的随机符点数: 0 <= n < 1.0
 4 print(random.randint(1,2))      #用于生成一个指定范围内的整数
 5 print(random.randrange(1,10))   #从指定范围内,按指定基数递增的集合中获取一个随机数
 6 print(random.uniform(1,10))     #用于生成一个指定范围内的随机符点数
 7 print(random.choice(nick))    #从序列中获取一个随机元素
 8 li = [nick,jenny,car,]
 9 random.shuffle(li)              #用于将一个列表中的元素打乱
10 print(li)
11 li_new = random.sample(li,2)    #从指定序列中随机获取指定长度的片断(从li中随机获取2个元素,作为一个片断返回)
12 print(li_new)

 

验证码:

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-      
 3 #Author: nulige
 4  
 5 import random
 6 
 7 def v_code():
 8 
 9     code = ‘‘
10     for i in range(6):  #生成随机6位长度验证码,通过这里控制
11 
12         num=random.randint(0,9)
13         alf=chr(random.randint(65,90))
14         add=random.choice([num,alf])
15         code += str(add)
16     return code
17 
18 print(v_code())

执行结果:

1 GAHTAR   #随机生成验证码(每次运行都不一样)

 

python基础-模块