栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

第十三节 模块与包

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第十三节 模块与包

1.模块

模块定义:包含一些数据、函数、类的文件,通常以.py结尾

1.1 模块导入

第一种

import 模块名

print('模块1')
def f1():
    print("模块1的f1")
import module01
module01.f1()



模块1
模块1的f1

作用:将某模块整体导入到当前模块中
使用:模块名.成员
本质:使用变量名关联模块地址

第二种

from 模块名 import 成员

print('模块1')
def f1():
    print("模块1的f1")
from module01 import f1
f1()


模块1
模块1的f1

本质:将指定的成员导入到当前模块作用域中

第三种

from 模块名 import *         #  *  全部的意思

print('模块1')
def f1():
    print("模块1的f1")
from module01 import *
f1()



模块1
模块1的f1

本质:将指定模块的所有成员导入到当前模块作用域中

注意:导入进来的成员不要与当前模块成员名称相同
如果相同了--》就近原则

as:取别名

from module01 import f1 as module01_f1

1.2 隐藏成员

模块中以下划线(_)开头的属性,不会被导入,通常称这些成员为隐藏成员。

隐藏成员 不能通过 
from 模块 import *

注意:隐藏成员可以对其他形式调用。

1.3 模块变量

__file__ : 模块对应的文件路径名 ,返回绝对路径。

__name__ : 模块自身的名字,可以判断是否为主模块。

在家是程序,在外是模块

python的__main__的作用:
    1.__main__  如果是作为模块来运行,__name__的值是模块名
    2.把一些非必要的代码,放到main函数里面
main的标准语法:
    if __name__ == '__main__':
        print(’我是作为程序执行的)  
快速写法:
    pycharm中输入main,然后按tab 或者 回车

1.4 模块分类

模块可以分为四大类

1.内置模块:在解析器的内部可以直接使用

2.标准库模块:安装Python时已安装且可以直接使用

time,random..re,os

直接import

3.第三方模块,通常是开源的,需要自己安装

reqeusts 爬虫模块
pymysql  连接数据库
pandas
.....

 pip install 模块名

下载第三方模块可以配置国内源
pip国内源
1)清化大学
PIP源地址:https://pypi.tuna.tsinghua.edu.cn/simple
2)阿里云
PIP源地址:http://mirrors.aliyun.com/pypi/simple/
3)豆瓣
PIP源地址:http://pypi.douban.com/simple/
4)中国科学技术大学
PIP源地址:http://pypi.mirrors.ustc.edu.cn/simple/
5)华中科技大学
PIP源地址:http://pypi.hustunique.com/

pip install 模块名 -i 源地址

 4.用户自己编写模块(可以作为别人的第三方模块)

2.包(package)

包的定义:将模块以文件夹的形式进行分组管理
包的作用:让一些相关的模块组织在一起,使得逻辑更加清晰

2.1 包的导入

方法一
from 包.模块 import 成员

方法二
from 包 import 模块

方法三
from 包.包.....模块 import 成员

2.2 __init__.py

__init__文件是包内必须存放的文件,会在包加载时被自动调用。

总结包的核心作用:
    把一些相同,类似功能的模块放到同一个包里面,进行统一管理
    在导入这个包里面的模块时,__init__.py的代码会自动执行
    利用这个机制,在__init__代码里面写上关于包内模块的使用说明

3.常用模块

Python标准库

3.1 sys

sys(system) :里面主要提供了一些变量和函数,使得我们获取到Python解释器的信息。

sys.module:获取当前程序中引入的所有模块(字典{模块的名字,模块对象})

pprint.pprint() # 该方法可以对我们打印的数据做简单的格式化

sys.path:返回一个列表,列表中保存的是模块的搜索路径

sys.platform:表示的是返回一个平台 

sys.exit():用来退出程序,可以附加消息

......

3.2 os

os:系统交互模块
os模块可以让我们对操作系统进行访问。

os.system() # 可以用来执行操作系统的命令
os.getcwd() # 获得当前python工作目录
os.mkdir() # 里面放的就文件名,创建文件夹
os.rmdir() # 里面放的就文件名,删除文件夹  只能删除空文件夹
os.remove('test.py') # 删除文件
os.rename('原文件名','新文件名') # 重命名
os.chdir() # 切换程序执行的位置

os.listdir() # 获取指定目录下所有文件和目录名

os还有专门函数功能可以帮忙判断是否是文件夹
os.path.exists(path):判断文件或者文件夹是否存在
os.path.isfile(path):判断是否为文件
os.path.isdir(path):判断是否为目录(文件夹)

3.3 time

time.time()          # 返回一个浮点数函数,UTC时间:从1970年开始到现在所经过的秒数

time.localtime()   

time.sleep() 

time.strftime('格式',要转换的时间)        # 格式化时间再输出
%Y 年 

%m 月       小写

%d 日        小写

%H 时  

%M 分   

%S 妙 

import time

print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))    #time.localtime()也可以不用写



2022-05-01 16:19:14
3.4 random

random:随机函数

random.random()                          # 生成一个 大于0 小于1的随机数
random.randint(start,end)             # 生成start-end之间的随机整数
random.choice(list)                       # 指定的列表中随机抽取
random.uniform(start,end)            # 生成start-end之间的随机小数
random.shuffle(seq)                      # 打乱序列类型的顺序

a = random.random()
print(a)
b = random.randint(1, 100)
print(b)
list1 = ['石头', '剪刀', '布']
c = random.choice(list1)
print(c)
d = random.uniform(0, 1)
print(d)
list2 = ['石头', '剪刀', '布']
e = random.shuffle(list2)
print(list2)


0.00810919793613496
84
剪刀
0.7731057556692558
['剪刀', '布', '石头']
# 制作一个验证码a-z,A-Z
def yzm():
    yzm = ''
    for i in range(4):
        yzm += chr(random.randint(65, 122))
    print(yzm)
yzm()


UKAz
3.5 json

json:json是一种文件的存储格式。

json是一种兼容性很强的文件格式。网络上大部分数据是以json形式传递让每个语言都可以访问。

序列化和反序列化:

序列数据:机器码(底层0和1)。
反序列数据:程序员看的代码。

json.dumps() # 序列化数据 转为json
json.loads() # json数据-》python数据

li1 = [1, 2, '爬虫']
s1 = json.dumps(li1)
print(s1)
print(type(s1))
s2 = json.loads(s1)
print(s2)
print(type(s2))



[1, 2, "u722cu866b"]

[1, 2, '爬虫']
3.6 re

正则表达式:普通字符和元字符构成字符串,描述一类字符串规则。

match: 匹配了就返回结果,如果匹配不上就会None

s1 = 'abcd'
pattern = 'ab'
res = re.match(pattern, s1)  # 
print(res)
print(res.group())




ab

findall : 所有能匹配的都放到列表中 。

s1 = 'abcdabababab'
pattern = 'ab'
res = re.findall(pattern, s1)   
print(res)


['ab', 'ab', 'ab', 'ab', 'ab']
3.6.1 元字符

. 表示任意一个字符,但是除了n
d 表示0-9之间任意一个数字
D 表示非数字
s 表示空白字符串
S 非空白
w 英文字母、数字、下划线、汉字
W 非w

print(re.match('.', 'abc'))
print(re.match('.', 'nabc'))
print(re.match('d', '123'))
print(re.match('D', 'abc'))
print(re.match('s', ' '))
print(re.match('S', 'abc'))
print(re.match('w', '_abc'))
print(re.match('W', 'abc'))




None





None

字符集:用中括号来表示,表示一个字符范围。

print(re.match('[abcd]', 'zbc'))
print(re.match('[abcdz]', 'zbc'))
[a-d] 表示一个范围,a-d之间字母
print(re.findall('[a-d]', 'zabc'))
print(re.findall('[a-z]', 'zabc'))
print(re.findall('[a-zA-Z]', 'Zabcc'))
[0-9] 表示0-9数字
print(re.match('[0-9]', '3A'))

print(re.findall('[a-d]', 'zabc'))
print(re.findall('[a-z]', 'zabc'))
print(re.findall('[a-zA-Z]', 'Zabcc'))
print(re.match('[0-9]', '3A'))


['a', 'b', 'c']
['z', 'a', 'b', 'c']
['Z', 'a', 'b', 'c', 'c']

^  取反   #是在字符集中表示取反意思

print(re.findall('[^a-d]', 'zabc'))



['z']

多字符匹配:

print(re.match('[Ss][Ss][Ss][Ss][Ss][Ss]', 'c乃荣46@'))

3.6.2 数量规则

* 匹配前一个字符的任意次数,包括0次。

+  匹配前一个字符重复匹配1次以上。

? 匹配前一个字符出现0次或者1次。

{m},{m,},{m,n}

print(re.match('d*', 'a123456789'))
print(re.match('d+', 'a123456789'))
print(re.match('d?', '12345a6789'))
print(re.match('d{3}', '123456789'))
print(re.match('d{3,}', '123456789'))
print(re.match('d{3,6}', '123456789'))



None




3.6.3 边界处理

^  开始

$  结束

print(re.match('1[358][5-9]d{8}',"13645678912"))
print(re.match('1[358][5-9]d{8}',"1364567891211111"))
print(re.match('^1[358][5-9]d{8}$',"1364567891211111"))




None
3.6.4 分组匹配

括号进行分组
分组:用圆括号起到分组的作用

group(n) n表示你的第几个分组,默认是1开始

groups() 返回一个元组,所有的分组都输出。

t = '2022-01-15'
print(re.match('(d{4})-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])', t))
res=re.match('(d{4})-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])', t)
print(res.group(0))
print(res.group(1))
print(res.group(2))
print(res.group(3))
print(res.groups())



2022-01-15
2022
01
15
('2022', '01', '15')

1的方式
正则表达式的字符串前面最好加上r
r:原始字符串转义失效,取消转义 。
1 就是代表第一个分组的内容。
n就是代表第n个分组的内容。

tag = '百度一下,你就知道'
res = re.match(r'<(w+)>([wW]*)', tag)
print(res.group(2))


百度一下,你就知道
3.6.5 方法详解

compile(pattern) 编辑的意思,用于同一个正则表达式被调用多次。

match()

        group(n)  n表示你的第几个分组,默认是1开始

        groups()  返回一个元组,所有的分组都输出。

tag = '百度一下,你就知道'
res = re.compile(r'<(w+)>([wW]*)')
print(res.match(tag))


findall() 返回的是一个列表,查找数据里面所有能匹配的正则表达式的结果。

print(re.findall('d', '123值zxc234'))
print(''.join(re.findall('d', '123值zxc234')))


['1', '2', '3', '2', '3', '4']
123234

split()  切割

t = '2022-05-03'
print(re.split('-', t))


['2022', '05', '03']

sub() 替换

t = '2022a-05a-03a'
print(re.sub('a','b',t,count=1))
print(re.sub('a','b',t,count=3))


2022b-05a-03a
2022b-05b-03b
4.制作一个简易的猜拳小程序
import sys
import time
import re
import random

cz = ['剪刀', '石头', '布']
show_time = time.strftime('%Y-%m-%d %H:%M:%S')
print(show_time)
print(f'欢迎来到猜拳游戏当前时间是:{show_time}')
password = input('请输入登录密码:')
res = re.match(r'^1[3458]d{4}(d)1{4}$', password)
if res == None:
    print('登录失败,您的密码错误。')
else:
    print('登录成功')
    while True:
        print('-' * 50)
        user = input('请进行猜拳(输入0退出游戏):')
        ai = random.choice(cz)
        if user in cz:
            if (user == '剪刀' and ai == '布') or (user == '石头' and ai == '剪刀') or (user == '布' and ai == '石头'):
                print(f'n你赢了,你出的是{user},电脑出的是{ai}n')
            elif user == ai:
                print(f'n平局,你出的是{user},电脑出的是{ai}n')
            else:
                print(f'n你输了,你出的是{user},电脑出的是{ai}n')
        elif user == '0':
            sys.exit('成功退出游戏~~~~~~')
        else:
            print('出招错误')

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/857385.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号