模块就是一组功能的集合体,我们的程序可以导入模块来复用模块里的功能
在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