笔记:
模块和包:
模块和包的基本概念:
模块(module):一个.py文件就是一个模块
包(package):类似于一个文件夹,可以管理和保持很多模块
注意:真正的包:__init__.py
通过包和模块,我们就可以项目化的管理软件
python中模块的导入问题:
import xxx # 直接导入需要的模块或者包
import xxx.xxx.xxx.xx # 如果存在多层,可以这样层层导入
import xxx as alias # 通过别名,简化导入的模块名称
from xx import xxx # python提供的一种导入
from xx import xxx as a # python提供的一种导入,可以别名
注意:在python,我们如果遇到比较复杂的命令,可以使用别名方式,将其简化
as
模块根据创建者存在三种分类:
官方内置的模块: python主目录下/lib
自定义模块 存在项目中
第三方 需要下载 python主目录下/lib/site-packages
使用pip工具进行下载
pip install 模块名称
pip uninstall 模块名称
main函数的作用和使用
javascript、python、PHP等等编程语言,若数据类型编程语言,是脚本语言,是解释型编程语言
所以这些编程语言往往没有main,即便是有,也不知程序的入口,有特殊作用
python其实是有main函数,但是作用不是程序的入口
main函数是用来写测试代码,该代码无法被导入到其他模块中!!!
常见内置模块的使用:
random
math
os
sys
os.path
uuid
hashlib
hmac
time
datetime
calendar
……
随机数模块——random
[ 'betavariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss',
'getrandbits', 'getstate', 'lognormvariate', 'normalvariate', 'paretovariate',
'randbytes', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate',
'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']
|-- random.random()
|-- random.choices()
|-- random.choice()
|-- random.randint()
|-- random.randrange()
|-- random.uniform()
|-- random.shuffle()
数学模块——math
|-- 三角函数相关的
|-- ceil
|-- floor
|-- degrees
|-- radians
|--
四舍五入是全局的round函数
学习模块,掌握两个全局函数
help
dir
uuid模块:
获取一个128位(比特)的永不重复的数字,当然我们使用的时候
会转换为32个的字符串
import uuid
uuid.uuid4().hex
python中跟时间相关的模块非常多:
time
datetime
calendar
在计算机中时间是非常特殊的东西,为了方便时间的显示,一般是字符串格式
当然时间在计算机中是对象,为了比较时间,时间又可以表示成数字(时间戳)
time:
1970-1-1 00:00:00
有了时间戳,就相当于了有参照点,我们就可以把时间换算成数字,进计算和比较
datetime:
加密模块:
hashlib:
hmac:
这两个模块主要用于hash加密
加密哪些事:
不可逆加密-- hash加密
数据校验
密码加密
特点:
单向性 明文 ---> 密文,但是密文无法还原成明文
唯一性 只要明文一致,得到的密文也是一定的
可逆加密:
对称加密:
加密和解密时使用一个相同的秘钥
DES
非对称加密
加密和解密时使用的不同的秘钥,其本质是一对秘钥
RSA
hashlib:
公共、公开的基于hash加密的各种算法、md5、sha512……
hmac:
会对明文进行对称加密和hash加密
常见可以做密码加密等功能
要求:通过教的学习模块的方式,尝试着使用如下一些第三方模块
操作Excel的一些模块
pandas
openpyxl
xlswriter
xlrd【了解即可】
xlwt【了解即可】
IO流:
什么是IO流:
input output stream:输入输出流
IO流分为广义上:计算机中数据的流动,像保存数据到硬盘、将数据通过网络传输到其他电脑中
狭义上:内存【CPU】和磁盘之间的数据流动
IO流的分类:
基于数据流动方向:
|-- 输入流
|-- 输出流
数据的格式:
|-- 字节流
|-- 字符流
python如何处理IO流:
python提供一个全局函数open(该函数在os模块中也存在),底层就是C语言的fopen函数
with语法:
在with语法中打开的IO流,with语法结束,会自动调用close进行关闭
对象序列化和对象持久化:
对象序列化:将抽象的对象(抽象概念)通过相关技术转换为可以存储或者传输的字符或者字节
对象序反列化:将序列化后的字符或者字节通过相关技术转换为可以的抽象的对象(抽象概念)
对象持久化:将抽象的对象(抽象概念)存储下来
对象反持久化:存储的对象数据还原成对象
python官方主要提供过了两个持久化的模块:
pickle
json
shelve
pickle:
pickle.dumps(obj) # 返回该对象序列化后的字节数据
pickle.loads(字节数据) # 反序列化
pickle.dump(obj, file) # 直接持久化
pickle.load(file) #
json:
dumps(obj) # 返回该对象序列化后
loads(字节数据) # 反序列化
dump(obj, file) # 直接持久化
load(file) #
作业:
demo1:
某个人进入如下一个棋盘中,要求从左上角开始走,
最后从右下角出来(要求只能前进,不能后退),
问题:共有多少种走法?
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
解:
demo2:
输入一行符号,以#结束,判断其中的对称符号是否匹配。对称符号包括:
{ } 、 [ ] 、 ( )、 < >
如果对称符号能够实现中间对称,则输出yes
否则输出no
测试用例
用例一:
输入:
(<{(({<>}))}>)
输出:
yes
输入:
()()()
输出:
no
解:
demo3:
给定一个包含n+1个整数的数组nums,其数字在1到n之间(包含1和n),
可知至少存在一个重复的整数,假设只有一个重复的整数,
请找出这个重复的数