模块就是一组功能的集合体,我们的程序可以导入模块来复用模块里的功能
在Python中,一个.py文件就称之为一个模块(Module)
一个模块就是一个包含了一组功能的python文件,比如spam.py,模块名为spam,可以通过import spam使用。
1)python标准库
2)第三方模块
3)应用程序自定义模块
解释器有自己的搜索路径,存在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)from spam import 模块名 from spam import 模块名 as 别名 from spam import * #不推荐
使用from...import...则是将spam中的名字直接导入到当前的名称空间中,所以在当前名称空间中,直接使用名字就可以了、无需加前缀:spam.
为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。
每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录(文件夹),而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是对应包的名字
调用包就是执行包下的__init__.py文件
在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__‘“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行
表示时间的方式:
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中,第一次调用,返回的是进程运行的实际时间。而第二次之后的调用是自第一次调用以后到现在的运行
# 时间,即两次时间差。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
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))原文:https://www.cnblogs.com/hujinzhong/p/11474205.html