python--import导入模块

import 导入模块

import搜索路径

import sys
print(sys.path)

路径搜索

  • 从sys.path所列的目录里依次查找需要导入的模块文件
  • ”表示当前路径
  • 列表中的路径的先后顺序代表了python解释器在搜索模块时的先后顺序

程序执行时添加新的模块路径

sys.path.append('...')  # 后面添加

sys.path.insert(0,'...')  # 前面添加,可以确保先搜索这个路径

重新导入模块

模块被导入后,字节码文件已生成,修改被导入模块不会影响现在执行的代码,如果需要重新加载被导入模块,使用import module是不能实现的,需要使用reload

from imp import reload
reload(被导入模块名)

特别注意:import…和from…import…的区别

from xx import xx :这个可以理解成深拷贝,会重新从字节码加载并创建一个内存对象,其他模块修改了被导入模块的的数据,只要字节码不变,那么在这个模块中还是原来的数据

# gril模块
hava_girl_friend = False
# find模块
from girl import *

def find():
    print('找到女友了')
    have_girl = True  # 这个尝试修改模块girl中的成员
# show模块
from girl import have_girl_friend

def show():
    if have_girl_friend:
        print('秀恩爱')
    else:
        print('苦X正在寻找中...')
# main模块
import find
import show

def main():
    find.find()  # 先尝试修改girl模块中的成员
    show.show()  # 判断from导入之后的girl模块中的成员值

if __name__ == '__main__':
    main()
# 答案
找到女友了
苦X正在寻找中...

说明:

  • from … import …导入方式每次导入相互独立,不会受前面某个关联模块导入相同模块的影响
  • 理解:每次from导入都从字节码中重新读取

import … 在关联进程中,一次导入后,后面直接拿来用,不会再次重新导入

# gril模块
hava_girl_friend = False
# find模块
import girl

def find():
    print('找到女友了')
    have_girl = True  # 这个尝试修改模块girl中的成员
# show模块
import girl

def show():
    if have_girl_friend:
        print('秀恩爱')
    else:
        print('苦X正在寻找中...')
# main模块
import find
import show

def main():
    find.find()  # 先尝试修改girl模块中的成员
    show.show()  # 判断from导入之后的girl模块中的成员值

if __name__ == '__main__':
    main()
# 答案
找到女友了
秀恩爱

说明

  • import导入方式在关联的进程中只加载一次字节码

猜你喜欢

转载自blog.csdn.net/lb786984530/article/details/81192645
今日推荐