模块和包

import my_moudle
import my_moudle #这里的想要告诉我们,只在第一次
导入时才会执行,后面再导入回执行,但是不会显示
sys.module是一个字典,内部包含模块名与模块对象的映射,
这个字典决定了到入模块时是否需要重新导入
每个模块都是一个独立的名称空间
测试money与my_moudle.money不冲突
money=10
print(my_moudle.money)
测试read1与my_moudle不冲突
def read1():
print('=====')
my_moudle.read1()
测试my_moudle.change()操作的全局变量money仍然是my_moudle中的
money=1
my_moudle.change()
print(money)

首次导入模块会做三件事:
1.为源文件(my_moudle模块)创建新的名称空间,在my_moudle中定义的函数
和方法若是使用到了global时访问的就是这个名称空间
2.在新创建的名称空间中执行模块中包含的代码
3.创建名字my_moudle来引用该名称空间
为模块名起别名
import my_moudle as sm
print(sm.money)

在一行导入多个模块
import sys,os,re
测试一:导入的函数read1,执行时仍然回到my_moudle.py中寻找全局变量money
from my_moudle import read1
money=10000
read1()

测试二:导入的函数read2,执行时需要调用read1(),仍然回到my_moudle.py中找read1()
from my_moudle import read2
def read1():
print('=====')
read2()

当前有重名的read1或read2,有覆盖效果
from my_moudle import read1
def read1():
print('=====')
read1()
python中的变量赋值不是一种存储操作,而是I一种绑定关系
from my_moudle import money,read1
money=100 #将当前位置的名字money绑定到了100
print(money) #打印当前的名字
read1() #读取my_moudle.py中的名字money,仍然为1000


from my_moudle import read1 as read
导入多行
from my_moudle import(
read1,
read2,
money
)

from my_moudle import *
把my_moudle中所有不是以下划线(_)开头的名字导
入到当前位置,不提倡用这种方式导入,因为你都不
清楚到底导入了什么,很有可能覆盖自己之前定义的名字,
并且可读性极差,在交互环境中导入没有问题
__all__=['money','read1'] #有*就有all

每个模块只被导入一次,放在字典sys.moudle中,如需改变模块内容,则需重启
python不支持重新加载或卸载之前导入的模块


但是你如果实在想改,就用,反正还是不建议改
import time,importlib
import my_moudle
my_moudle.func1()
time.sleep(15)
importlib.reload(my_moudle)
my_moudle.func1()

把模块当脚本运行
_name__等于'__main__'
当作模块导入
__name__=模块名
作用:用来控制.py文件字不同的应用场景下执行的不同逻辑
if__name__=='__main__'
def fib(n):
a, b = 0, 1
while b < n:
print(b, end=' ')
a, b = b, a+b
print()

if __name__ == "__main__":
print(__name__)
num = input('num :')
fib(int(num))


模块搜索路径
模块查找顺序:内存中已经加载的--内置----sys.path路径中包含的模块
注意:我们自定义的模块不应该和系统内置模块重名

搜索时按照sys.path中从左到右的顺序查找
#首先制作归档文件:zip module.zip foo.py bar.py

import sys
sys.path.append('module.zip')
import foo,bar

#也可以使用zip中目录结构的具体位置
sys.path.append('module.zip/lib/python')

#windows下的路径不加r开头,会语法错误
sys.path.insert(0,r'C:UsersAdministratorPycharmProjectsa')
编译python文件
dir函数
内建函数dir是用来查找模块中定义的名字,返回一个有序字符串列表
import my_moudle
dir(my_moudle)
如果没有参数,dir()列举出当前定义的名字


dir()不会列举出内建函数或者变量的名字,它们都被定义到了标准模块builtin中,可以列举出它们,
原文地址:https://www.cnblogs.com/1996-11-01-614lb/p/7327359.html