Python——模块

1. 模块相关的基本知识

(1)模块导入位置

  所有的模块导入都应该尽量写在开始

(2)模块导入顺序

  内置 > 扩展 > 自定义

(3)模块是否会被重复导入

   sys.moudles

(4)从哪儿导入模块

   sys.path

# 模块为什么不会被重复导入?

# 先从sys.modules里查看是否已经被导入
# 如果没有被导入就依据sys.path路径去寻找模块
# 找到了就导入模块,没找到就报错
# 导入之前,创建这个模块的命名空间
# 执行文件,把文件中的名字都放到命名空间里


import sys

print(sys.modules)    # 检查模块是否已被导入
print(sys.modules.keys())
print(sys.path)    # 导入模块的路径
View Code

2. 模块的导入方式

(1)import 模块名  

  调用:模块名.变量名

  导入的模块有独立的命名空间,和本文件中变量名完全不冲突

import demo     # in demo.py

def read():
    print('in my own',money)
money = 200

demo.read()     # in demo 100
print(demo.money)   # 100
View Code

(2)import 模块名 as 重命名的模块名  

  提高代码的兼容性

import time as t    # 给time取别名为t

print(t.time())     # 可以直接用别名操作  1539069128.1001534
# print(time.time())     # 报错:重命名之后,原名字不可以用
View Code

(3)import 模块名1,模块名2,模块名3,... 【少用】

(4)from ... import ...  

  <1> from 模块名 import 变量名   

     直接使用变量名就可以完成操作
     和本文件中重名的变量名会发生冲突

  <2> from 模块名 import 变量名 as 重命名变量名  

  <3> from 模块名 import 变量名1,变量名2,变量名3,...  

  <4> from 模块名 import * 【少用】

     将模块中的所有变量名都放到内存中
     和本文件中重名的变量名会发生冲突
     from 模块名 import * 和 __all__ = ['变量名1','变量名2',...]是一对
      有__all__,就只导入all列表中的名字
      没有__all__,就导入所有名字

#   demo.py中有__all__ = ['money']时

from demo import *
print(money)  # 100
read()  # 报错

#   demo.py中没有__all__ = ['money']时

from demo import *
print(money)  # 100
read()  # in demo 1 100
View Code
# demo.py


__all__ = ['read','read2']
money = 100

def login():
    print('正在执行此登陆程序')
def read():
    print('in demo read()',money)
def read2():
    print('in demo read2()')



# 需求:执行demo.py时,执行打印
#       导入demo时,不执行打印

# 在demo.py 中执行时才执行下面代码
if __name__ == '__main__':
    ret = login()
    print(ret)
    print('hello')

# print(__name__)
    # demo : 在 03 模块.py 中执行
    # __main__ :  在demo.py 中执行
View Code

      在模块中,有一个变量__name__
      直接执行此模块时:__name__ == __main__
      在其他模块中引用此模块执行时,__name__ == __模块的名字__

 

posted @ 2018-10-09 21:42  xc_718  阅读(109)  评论(0编辑  收藏  举报