python基础梳理(十七)模块剩余内容(加载、编译、文档字符串以及模块_name_等属性、all列表、random模块)、包(模块包)

一、模块加载的过程
1.先搜索相关路径找模块 .py
2.判断是否有此模块对应的.pyc文件,如果没有,则用.py文件生成相应的.pyc文件再进行加载
3.如果文件已经存在,则判断.pyc文件和.py文件修改时间,再决定要不要重新生成.pyc文件(我们既然要用当然是用最新的文件了,在linux我们使用ls -l命令看到的文件的时间其实就是最新修改的时间)

二、模块的编译 compile
mymod .py ------>编译------>mymod.pyc----------->解释执行--------->python3
mymod.pyc:机器指令

三、模块的文档字符串:
模块内第一行没有赋值给任何变量的字符串称为文档字符串
此文档字符串可以用help函数查看

#mymod模块中的内容,""""""中就是文档字符串的内容

""""你看到的这串字符就是mymod的文档字符串,
其实我和函数的文档字符串一样,都是用来做说明的,
比如说明这个模块是什么时候写的,谁写的,有什么函数,用来干啥的等
此模块有俩个函数,一个变量x"""
def fn(x):
    print("我是mymod模块中的fn函数,我被执行")

def fx(m):
    print("我是mymod模块中的fx函数,我也被执行")

print("mymod中的打印语句执行")
x = 100
print("mymod中的x值为",x)

#我们在其他模块查看该内容,用help(模块名)
import mymod
help(mymod)

执行结果:如下图

在这里插入图片描述
**doc**属性:模块的文档字符串绑定着该属性 mymod._doc_可以查看
** _file_属性 **:用来绑定模块对应的文件路径名
示例:
import mymod
print(mymod.file)

模块的_name_属性:
作用:
记录模块名
用来判断是否为主模块

** name 属性说明
1.当此模块作为主模块(也就是
第一个运行的模块**)运行时,
_ name_绑定 _main _ 属性
2.当此模块不是主模块时,模块名为文件名去掉 .py

所谓主模块:主动的去导入其他模块,这样他的名字_ name _就不是文件名。
而是_main _,即就是我们去先运行的那个模块

非主模块:被别的文件导入或者引入的模块,该模块的_name_即使文件名

模块中的_ all _列表:

模块中的_ all 列表是一个可以用来存放可导出属性的字符串列表
作用:
当用from import *语句导入模块时,只导入
all _列表内的属性
(只在该语句时,才只导入 _ all _列表中的属性)

模块的隐藏属性:

*模块中以’ _ '开头的属性(变量),在from import *语句导入时
将不会导入,通常称这些属性为隐藏属性(变量)
即就是from import 不能导入使用 _ 开头的名字

示例:
在mymod模块中:
name = ‘hello’
_name = ‘python’
在另外一个模块中:
from mymod import * 执行后只会把name导入,不会将_name导入

标准库模块:
随机模块:random
作用:
用于模拟或生成随机数的模块

常见的一些方法:

import random as r

L = [1,2,3,4,67,9]
r.random() #返回一个[0,1)之间的随机时数
r.uniform(1,10)#返回[1,10)区间内随机实数
r.randrange(1,10,2)#返回range(1,10,2)中的随机数
r.choice(L)#返回序列中的随意元素
r.shuffle(L)#随机指定序列的顺序,打乱序列的顺序
r.sample(L,2)#从序列中选择n个且不重复的元素
r.seed(a = None)#设置随机数种子,默认以系统时间为随机数种子

#####################################################################3

包(模块包) package
包是将模块以文件夹的组织形式进行分组管理的方法,其实就是文件夹
命名包:文件夹必须存在 _ init _ .py文件
远程包:可以没有 init .py文件

包的作用:
将一系列模块进行分类管理,有利于防止命名冲突
可以在需要时加载一个或部分农垦而不是全部模块

包示例:其实就是一个目录结构
mypack/
_ init _.py
menu.py
games/
_ init _.py
contra . py #魂斗罗
supermario .py #超级玛丽
tanks .py #坦克大战
office/
_ init _.py
excel .py
word .py
powerpoint. py

其实就是一种分类管理的方式,就像行李箱,洗漱放在一个袋子里,卡放在一个袋子里等等

import mypack #导入mypack包
#像调用meny.py模块里的show_menu函数
import mypack.menu #导入mypack包中的menu模块
mypack.menu.show_menu()#调用menu里的show_menu函数

import mypack.games.contra.play() #调用模块contra中的play()函数

包的导入语法:
import 包名 [as 包别名]
import 包名 .模块名 [as 模块新名]
import 包名 .子包名.模块名 [as 模块新名]

from 包名 import 模块名 as 模块新名
from 包名.子包名 import 模块名 [as 模块新名]
from 包名.子包名.模块名 import 属性名 [as 属性新名]

from 包名 import *
from 包名 . 模块名 import *

作用:
1.标志一个完整的包,象征这是一个命名包
是常规包中必须存在的文件, _ init _.py会在导入包时被自动调用
2.可以编写此包的内容
3.在内部添加包的文档字符串
4.在 _init _.py文件内可以加载此包所依赖的其他模块,写一些其他的语句等

注:可通过dir(包名)来查看包中的变量

包和模块的区别就是:包里面可以有子包,还可以有模块;模块也可以是个包

二、包的 _ all _列表:
作用:
用来记录此包中有哪些子包或模块需要导入
当用from 包 import * 语句导入的时候,只要查找 _ all _中的模块或子包即可
需要我们在 _ all _ 列表中指定还要导入哪些
说明:
_ all _ 列表只在from xxx import * 语句时起作用
当子包或子包内的模块被导入时,上一层的包也会被导入
例如:
import mypack.games.contra
实质会先导入mypack,再导入games,再导入contra(我们想导入一个小的,应该将大的导入,依次,最终将最小的导入)
三、包的相对导入
是指同一个包内的模块相互导入
语法:
from 相对路径包或模块 import 属性或模块名
from 相对路径包或模块 import *
相对路径:
在from xxxx import 语句中,xxxx部分可以使用相对路径
.代表当前目录
…代表上一级目录
…代表上二级目录
以此类推
注:
1.相对导入时不能超出包的外部
2.相对导入要避免循环导入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值