首页 > 编程语言 > 详细

Python基础(七)-模块概念及常用模块

时间:2019-09-06 14:40:03      阅读:70      评论:0      收藏:0      [点我收藏+]

一、模块介绍

1.1、模块定义

模块就是一组功能的集合体,我们的程序可以导入模块来复用模块里的功能

在Python中,一个.py文件就称之为一个模块(Module)

一个模块就是一个包含了一组功能的python文件,比如spam.py,模块名为spam,可以通过import spam使用。

1.2、模块分类

1)python标准库

2)第三方模块

3)应用程序自定义模块

1.3、模块的导入

1.3.1、import导入

解释器有自己的搜索路径,存在sys.path里。在当前目录下存在与要引入模块同名的文件,就会把要引入的模块屏蔽掉  

import 模块名   #导入单个模块
import sys,os,re  #导入多个模块

可以模块名起别名

import spam as sm
-----------------------------------------------------------

#有两中sql模块mysql和oracle,根据用户的输入,选择不同的sql功能
#mysql.py
def sqlparse():
    print(‘from mysql sqlparse‘)

#oracle.py
def sqlparse():
    print(‘from oracle sqlparse‘)

#test.py
db_type=input(‘>>: ‘)
if db_type == ‘mysql‘:
    import mysql as db
elif db_type == ‘oracle‘:
    import oracle as db

db.sqlparse() 
-----------------------------------------------------------

#假设有两个模块xmlreader.py和csvreader.py,它们都定义了函数read_data(filename):用来从文件中读取一些数据,但采用不同的输入格式。可以编写代码来选择性地挑选读取模块

if file_format == ‘xml‘:
    import xmlreader as reader
elif file_format == ‘csv‘:
    import csvreader as reader
data=reader.read_date(filename)

1.3.2、from … import..导入

from spam import 模块名
from spam import 模块名 as 别名
from spam import *  #不推荐

使用from...import...则是将spam中的名字直接导入到当前的名称空间中,所以在当前名称空间中,直接使用名字就可以了、无需加前缀:spam.

二、包的概念

2.1、包的介绍

为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。

每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录(文件夹),而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是对应包的名字

调用包就是执行包下的__init__.py文件

2.2、包使用注意事项

技术分享图片

在nod1里import  hello是找不到的,pycharm把myapp路径加入到了sys.path,但是程序一旦在命令行运行就报错,需要自己将路径加进去

import sys,os
BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)
import hello
hello.hello1()

注意

1)如果我们是直接执行某个.py文件的时候,该文件中那么”__name__ == ‘__main__‘“是True

2)我们如果从另外一个.py文件通过import导入该文件的时候,这时__name__的值就是我们这个py文件的名字而不是__main__。

3)调试代码的时候,在”if __name__ == ‘__main__‘“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行

三、常用模块

3.1、time与datetime模块

3.1.1、time模块

表示时间的方式

  1. 时间戳(timestamp):从1970年1月1日00:00:00开始按秒计算的偏移量
  2. 格式化的时间字符串(Format String)
  3. 结构化的时间(struct_time):struct_time元组共有9个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)

技术分享图片

import time
#将时间戳时间转换为结构化时间
print(time.localtime()) #time.struct_time(tm_year=2019, tm_mon=9, tm_mday=6, tm_hour=13, tm_min=30, tm_sec=55, tm_wday=4, tm_yday=249, tm_isdst=0)
print(time.localtime(1473525444.037215)) #time.struct_time(tm_year=2016, tm_mon=9, tm_mday=11, tm_hour=0, tm_min=37, tm_sec=24, tm_wday=6, tm_yday=255, tm_isdst=0)
print(time.gmtime()) #time.struct_time(tm_year=2019, tm_mon=9, tm_mday=6, tm_hour=5, tm_min=33, tm_sec=56, tm_wday=4, tm_yday=249, tm_isdst=0)

#将结构化时间转换为时间戳
print(time.mktime(time.localtime()))  #1567748196.0

#将结构化时间转换为格式化的时间字符串
print(time.strftime("%Y-%m-%d %X",time.localtime()))  #2019-09-06 13:39:42

#把一个格式化时间字符串转化为struct_time,与strftime()是逆操作
print(time.strptime("2019-09-06 13:39:42","%Y-%m-%d %X"))  #time.struct_time(tm_year=2019, tm_mon=9, tm_mday=6, tm_hour=13, tm_min=39, tm_sec=42, tm_wday=4, tm_yday=249, tm_isdst=-1)

技术分享图片

print(time.asctime())  #Fri Sep  6 13:46:08 2019
print(time.ctime())    #Fri Sep  6 13:46:59 2019
print(time.time())     #1567748858.9732707
print(time.ctime(time.time()))  #Fri Sep  6 13:47:21 2019

时间操作总结:

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

3.1.2、datetime模块

import datetime

print(datetime.datetime.now())  #2019-09-06 14:09:04.430077
# print(datetime.date.fromtimestamp(time.time()))
print(datetime.datetime.now() + datetime.timedelta(3))  #2019-09-09 14:10:02.750837
print(datetime.datetime.now() + datetime.timedelta(-3)) #2019-09-03 14:10:21.448636
print(datetime.datetime.now() + datetime.timedelta(hours=3))  #2019-09-06 17:10:37.330027
print(datetime.datetime.now() + datetime.timedelta(minutes=30))  #2019-09-06 14:41:02.646481

c_time  = datetime.datetime.now()  #2019-09-06 14:41:23.021579
print(c_time.replace(minute=3,hour=2)) #时间替换 2019-09-06 02:03:23.021579

3.2、random模块

import random
print(random.random())   #(0,1)float
print(random.randint(1,3))  #[1,3]整数
print(random.randrange(1,3))  #[1,3)整数
print(random.choice([1,"a",[4,5],"bc"]))  #列表中随机取一个
print(random.sample([1,"a",[4,5],"bc"],2))  #列表中任意两个组合
print(random.uniform(1,3))  ##大于1小于3的小数,如1.927109612082716

#打乱顺序
item=[1,3,5,7,9]
print(random.shuffle(item))  #None,调用 方式不对
random.shuffle(item)
print(item)  #[3, 5, 7, 1, 9]

获取随机验证码:

import random
def make_code(n):
    res=‘‘
    for i in range(n):
        s1=chr(random.randint(65,90))
        s2=str(random.randint(0,9))
        res+=random.choice([s1,s2])
    return res

print(make_code(9))

Python基础(七)-模块概念及常用模块

原文:https://www.cnblogs.com/hujinzhong/p/11474205.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!