首页 > 代码库 > 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分钟
查看帮助示例:
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 Locale‘s abbreviated weekday name. 20 %A Locale‘s full weekday name. 21 %b Locale‘s abbreviated month name. 22 %B Locale‘s full month name. 23 %c Locale‘s appropriate date and time representation. 24 %I Hour (12-hour clock) as a decimal number [01,12]. 25 %p Locale‘s 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基础-模块