Tiny_Lu
不忘初心

Day 15 python模块/模块导入

模块的四种形式

自定义模块

自定义一个.py文件,文件内都是自己写的函数,则称为自定义模块,可以导入并调用

第三方模块

已被编译为共享库或DLL的C或C++扩展

内置模块

使用C编写并链接到python解释器的内置模块

把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)

import和from...import

一般使用import或者from...import导入模块

import time

time.time()

模块的重复导入会直接饮用之前创造好的结果,不会重复执行模块的文件,即重复导入会发生:spam=spam=模块名称空间的内存地址

from time import time

time()

使用import module时,module本身被引入,但是保存它原有的命名空间,所以我们需要使用module.name这种方式访问它的 函数和变量。
from module import这种方式,是将其它模块的函数或者变量引到当前的命名空间中,所以就不需要使用module.name这种方式访问其它的模块的方法了。

循环导入问题

# m1.py
form m2 import y
x = 10
print('m1:',x, y)
# m2.py
form m1 import x
y = 20
print('m2:',x, y)

运行m1,会发生报错:ImportError: cannot import name 'x'

解决方法一:

将定义变量放到导入模块之前

# m1.py
x = 10
form m2 import y
print('m1:',x, y)
# m2.py
y = 20
form m1 import x
print('m2:',x, y)

解决方法二:

将导入模块放到函数定义中

# m1.py
x = 10
def func1():
	form m2 import y
	print('m1:',x, y)

func1()
# m2.py
y = 20
def func2():
	form m1 import x
	print('m2:',x, y)
    
func2()

模块搜索路径的顺序

  1. 先从内存中已经导入的模块寻找
  2. 内置的模块中
  3. 环境变量sys.path中寻找

强调:sys.path的第一个值是当前执行文件的所在的文件夹

python文件的两种用途

python文件总共有两种用途,一种是执行文件;另一种是被当做模块导入。

编写好的一个python文件可以有两种用途:

  1. 脚本,一个文件就是整个程序,用来被执行
  2. 模块,文件中存放着一堆功能,用来被导入
# m1.py
def f1():
    print('m1')
    
f1()
# run.py
import m1

如果直接运行run.py,则会直接运行m1.py中的f1()

如果我们要防止这种事情发生,可以在m1.py文件中的f1()加上条件__name__ = '__main__',这样在运行run.py文件的时候就不会运行f1()了

如果是放在被调用文件,可以用来测试,如果放在启动文件中,则是用来防止启动文件被调用

# m1.py
def f1():
    print('m1')
    
if __name__ = '__main__':
	f1()
posted @ 2019-09-26 17:29  二二二二白、  阅读(160)  评论(0编辑  收藏  举报