目录
0.模块定义&作用
1.模块:是代码组织的一种方式,把功能相近的函数或者类放到一个文件中, 一个文件(.py)就是一个模块--模块名就是文件名去掉后缀.py 2.模块的作用: (1)提高代码的可复用、可维护性。可以在其他项目中很方便地导入。 (2)解决了命名冲突,不同模块中相同的命名不会冲突。
1.自定义模块
创建一个.py文件,在里面定义变量/函数/类
# 示例:
# step1:创建模块文件Phone.py
'''
模块中代码:
# 我是自定义模块
# 变量
phone1 = '华为P30'
phone2 = '小米8'
# 函数
def shown(phone):
print('我是手机:{}'.format(phone))
# 类
class PhoneClass:
def __init__(self,p):
self.p = p
def info(self):
print('我是类中的info方法')
'''
2.导入模块:import
import Phone
# 使用模块中变量
print('模块中变量-----------')
print(Phone.phone1,Phone.phone2)
# 模块中变量-----------
# 华为P30 小米8
# 使用模块中函数
print('模块中函数-----------')
Phone.shown('华为畅享10Plus')
# 模块中函数-----------
# 我是手机:华为畅享10Plus
# 使用模块中类
print('模块中类-----------')
vivo = Phone.PhoneClass('vivo')
vivo.info()
# 模块中类-----------
# 我是类中的info方法
3.导入模块:from ...import
# 导入模块中一个变量
from Phone import phone1
print(phone1)
# 华为P30
# # 导入模块中多个变量
from Phone import phone1,phone2
print(phone1,phone2)
# 华为P30 小米8
# 导入模块中函数
from Phone import shown
shown('小米9')
# 我是手机:小米9
# 导入模块中类
from Phone import PhoneClass
a = PhoneClass('魅族')
a.info()
# 我是类中的info方法
# 同时导入函数,变量,类
from Phone import shown,PhoneClass,phone2
print(phone2)
shown('华为荣耀')
b=PhoneClass('oppo')
print(b)
# 小米8
# 我是手机:华为荣耀
# <Phone.PhoneClass object at 0x0000020932C98320>
导入模块中所有内容:from Phone import *
from Phone import *
print(phone2)
shown('华为荣耀')
b=PhoneClass('oppo')
print(b)
# 小米8
# 我是手机:华为荣耀
# <Phone.PhoneClass object at 0x000001BFFA718320>
# 注意: # 如果想限制获取到的模块内的内容,可以在模块文件中使用__all__=['使用*可以访问到的内容']
# 现在在Phone.py模块文件中首行加上__all__=['phone1','shown']
# 现在再来导入试试:
from Phone import *
print('-----------',phone1)
c=PhoneClass('test')
print('------------',c)
print('-----------',phone2)
# Traceback (most recent call last):
# ----------- 华为P30
# File "D:/Python/code/mainxiangobject/object5.py", line 113, in <module>
# c=PhoneClass('test')
# NameError: name 'PhoneClass' is not defined
4.系统模块
-sys
python解析器对模块位置的搜索顺序为:当导入一个模块的时候,python解析器对模块位置的搜索顺序为: 1.当前目录 2.在shell变量PYTHONPATH下的每个目录 3.查看默认路径。UNIX下,默认路径一般为/usr/local/lib/python。 模块搜索路径存储在system模块的sys.path变量中。变量中包含当前目录,PYTHONPATH由安装过程觉得的的安装路径。
import sys
print(sys.path)
# ['D:\\Python\\code\\mainxiangobject',
# 'D:\\Python\\code\\mainxiangobject',
# 'D:\\Python\\code\\mainxiangobject\\venv\\Scripts\\python36.zip',
# 'D:\\Python\\Anaconda\\DLLs',
# 'D:\\Python\\Anaconda\\lib',
# 'D:\\Python\\Anaconda',
# 'D:\\Python\\code\\mainxiangobject\\venv',
# 'D:\\Python\\code\\mainxiangobject\\venv\\lib\\site-packages',
# 'D:\\Python\\code\\mainxiangobject\\venv\\lib\\site-packages\\setuptools-39.1.0-py3.6.egg',
# 'D:\\Python\\code\\mainxiangobject\\venv\\lib\\site-packages\\pip-10.0.1-py3.6.egg']
print(sys.version)
# 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)]
print(sys.argv) # 运行程序时的参数,argv是一个列表。
# 其值也就是相当于在cmd下运行:python python文件名[,参数]的时候,sys.argv的值就是python后面的[python文件名[,参数]]。
# 返回结果:
# ['D:/Python/code/mainxiangobject/object6.py']
# 点击右上角运行,edit configurations,将参数填111,运行print(sys.argv)会出现以下结果
# ['D:/Python/code/mainxiangobject/object6.py', '111']
-time
# time
import time
# time.time()
t1 = time.time() # 时间戳
print(t1) # 1591600578.5291822
time.sleep(3) # 延迟执行3s
t2 = time.time() # 时间戳
print(t2) # 1591600581.53002
# 将时间戳转成字符串:time.ctime()
t3 = time.ctime(t1)
t4 = time.ctime(t2)
print(t3) # Mon Jun 8 15:16:18 2020
print(t4) # Mon Jun 8 15:16:21 2020
# 将时间戳转成元组形式:time.localtime()
t5 = time.time() # 时间戳
t6 = time.localtime(t5)
print(t6)
# time.struct_time(tm_year=2020, tm_mon=6, tm_mday=8, tm_hour=15, tm_min=19, tm_sec=48, tm_wday=0, tm_yday=160, tm_isdst=0)
print(t6.tm_hour) # 15
print(t6.tm_year) # 2020
# 将元组形式的时间转换成时间戳:time.mktime()【会将小数点后面统统置于.0】
t7 = time.mktime(t6)
print(t7) # 1591600891.0
# 将元组形式的时间转换成字符串:time.strftime()
t8 = time.strftime('%Y-%m-%d %H:%M:%S') # 当前时间
print(t8) # 2020-06-08 15:26:38
# 将指定格式的时间转成元组形式:time.strptime()
t9 = time.strptime('2020/06/08','%Y/%m/%d')
print(t9)
# time.struct_time(tm_year=2020, tm_mon=6, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=160, tm_isdst=-1)
-datetime
# datetime
import datetime
# datetime.time
print(datetime.time.hour) # <attribute 'hour' of 'datetime.time' objects>,是一个对象
# datetime.date
print(datetime.date.day) # <attribute 'day' of 'datetime.date' objects>
d = datetime.date(2020,6,8)
print(d.day) # 8
print(datetime.date.ctime(d)) # Mon Jun 8 00:00:00 2020
print(datetime.date.today()) # 2020-06-08
# datetime.datetime
# 得到当前的日期和时间
print(datetime.datetime.now()) # 2020-06-08 15:42:43.387057
# 时间差:datetime.timedelta(),可以传days,hours,weeks等
# 作用: 缓存--数据库redis 作为缓存
print(datetime.timedelta(hours=2)) # 2:00:00
now = datetime.datetime.now()
print('now:',now) # now: 2020-06-08 15:44:46.161483
print(now - datetime.timedelta(hours=2)) # 2020-06-08 13:44:46.161483
print(now + datetime.timedelta(hours=2)) # 2020-06-08 17:44:46.161483
# 计算当前时间三天、2个小时后的时间
now2=datetime.datetime.now()
t = datetime.timedelta(days=3,hours=2)
print(now2+t) # 2020-06-11 17:50:31.495195
-random
# random
import random
# random.random():0-1之间的随机小数
ran1 = random.random()
print(ran1) # 0.8894608533637883
# random.randrange(start,stop,step):从1开始产生[1,10]的随机整数,步长为2
ran2 = random.randrange(1,10,2)
print(ran2)
# random.randint(a,b): 从a开始产生[a,b)的随机整数
ran3 = random.randint(1,10)
print(ran3)
# random.choice(list): 选择list中的随机元素
lis1 = ['金福珠','南柱赫','宋慧乔','宋仲基']
print(random.choice(lis1))
# random.shuffle(list): 打乱顺序【洗牌】
score = [99,92,87,100,82,98]
random.shuffle(score)
print(score) # [92, 99, 100, 87, 98, 82]
使用random.randint、random.choice产生验证码案例:
import random
# demo: 验证码
def yzm():
code =''
for i in range(4):
ran1=str(random.randint(0,9))
ran2=chr(random.randint(65,90)) # 大写字母
ran3 = chr(random.randint(97, 122)) # 小写字母
r=random.choice([ran1,ran2,ran3]) # 每次都从列表中随机选择一个
code+=r
return code
res = yzm()
print(res)
- chr & ord
# chr 将Unicode码转为str
print(chr(65)) # A
# ord 将str转为Unicode码
print(ord('A')) # 65
print(ord('梦')) # 26790
print(ord('想')) # 24819
print(chr(26790)) # 梦
print(chr(24819)) # 想
- haslib模块【加密】
# haslib模块【含加密算法】
import hashlib
# 加密算法:md5 sha sha256 都是单项的,只能加密,无法解密
# 将加密后的信息存入数据库,然后将用户输入的进行加密与数据库中的加密信息比对,来判断是否输入正确
# PS:加密算法base64可以加密解密
p='我是机密'
# 使用md5加密
md5 = hashlib.md5(p.encode('utf-8'))
# 转成16进制输入【否则直接无法输出】
print(md5.hexdigest()) # a10cb61e6b2f791863499715c1e0a537
# 使用sha256加密
sha256 = hashlib.sha256(p.encode('utf-8'))
print(sha256.hexdigest()) # 29258b527f5bff9cf6b8ac1ba3c4771a0c5f48083683ab176acfbe9e1c09351c
-第三方模块
是指非系统模块。
使用之前需要自己下载,如 :pip pillow
import pillow
import requests
response = requests.get('https://www.baidu.com/')
res = response.text
print(res)