Python——面向对象(5)--- 模块

本文介绍了Python中的模块概念及其作用,包括自定义模块的创建,通过`import`和`from...import`方式导入模块,详细讲解了`sys`、`time`、`datetime`、`random`等系统模块的使用,例如使用`random`生成验证码。还提到了`chr`与`ord`函数,以及haslib加密模块和第三方模块的安装,如`pip install pillow`。
摘要由CSDN通过智能技术生成

目录

0.模块定义&作用

1.自定义模块

2.导入模块:import

3.导入模块:from ...import

4.系统模块

-sys

-time

-datetime

-random

- chr  &  ord

-第三方模块


 

 

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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值