day5_ 导入模块和包

######################模块
导入模块做的事
1.产生新的名称空间
2.以新建的名称空间为全局名称空间,执行文件的代码
3.拿到一个模块名spam,指向spam.py产生的名称空间

import 文件名 导入 在同级目录下
import x
x.foo() 之后 调用该模块下的 函数 或者变量 要加 模块名(文件名)

from ... import ...
优点:方便,不用加前缀
缺点:容易跟当前文件的名称空间冲突

可以导入文件下的一个函数

from sparm import foo
foo()  -->之后 可以直接 执行





from sparm import *    -->导入 所有 功能  可以 直接调用
foo()
foo2()
glo()
foo()
print (A)

备注:sparm 中 开头定义了变量 A=100 又定义了函数 foo 和 foo2 都是 打印 变量 A,
          函数glo()定义了 修改全局变量 A =111 之后 再调用 foo 打印的 A 是 111 而 直接 print (A) 打印的是 100没变


######################包
#当 在写一个比较大的项目时候  会引入 包的作用
# 在别人 引用的你的 代码的时候 或者你引用别人的代码的时候 import 或者 from * import *
#在引入的一个是 文件夹的时候 其实 是在导入 该文件夹下的 __init__.py 文件
#再通过这个文件 导入 你这个文件夹 下的 其他 文件 或目录

目录结构 是这样的
test.py
glance
  __init__.py (glance)
  api
    __init__.py (api)
    testapi.py

 test.py==>

import glance   

glance.B()


glance目录-->__init__.py (glance)==>
from .api.api_test1 import *
from .api.mode import *

api目录-->__init__.py (api)==>
什么都没定义

testapi.py==>
def B():
print ('这个是api 下的 test1的B')

----------------------这样 在和glance同级目录的文件就 可以调用 最里面 api 目录下文件的功能了
最里面的文件 可以定义被调用的功能,放入一个列表,如果不在这个列表 就不被调用
__all__=[]  来定义;这里面存放 被调用的

===============>然后还可以 定义 如果被调用,执行什么, 自己测试 执行什么
if __name__ == '__main__':-->自己测试的结果
  print ('自己测试')
else:            -->调用的结果
  from .api.testapi import *
  print ('被其他地方调用')

===========================================以上 的执行 形式 是 glance.功能(),但是 这样有可能会 遇见功能名重复;所以 参考 下面:


###################执行形式 是 glance.文件名.功能()

目录结构 是这样的 
test.py
glance
  __init__.py (glance)
  api
    __init__.py (api)
    testapi.py


test.py==>>
import glance

glance.mode.A()
glance.mode.C()
glance.api_test1.B()
glance.api_test1.D()

glance目录-->__init__.py (glance)==>
  from .api import *   #--->api_test1    mode
api目录-->__init__.py (api)==>
  
if __name__ =='__main__':  
print ('这个是api')

from .api_test1 import *   --># B D 功能
from .mode import *     -->#AC


testapi.py==>
  
def B():
print ('这个是api 下的 test1的B')

def D():
print ('不该显示这个D')

mode.py==>

def A():
print ('model')

def C():
print ('不该显示这个C')











原文地址:https://www.cnblogs.com/onda/p/6929020.html