当前位置:   article > 正文

Python中的导入模块

Python中的导入模块

1,导入模块的的几种方式

模块是什么?
模块实际上就是 以.py为结尾的文件
注意点:自定义的模块尽量不要和系统模块重名

模块内部封装了很多实用的功能,有时在模块外部调用就需要将其导入,导入模块简单划分,实际上就只有两种:

  • import ……
  • from …… import

详细一点划分有五种:

  • 1,improt 模块名
    调用:模块名.功能名
  • 2,import 模块名 as 别名
    调用:别名.功能名
  • 3,from 模块名 import 功能名
    调用:直接功能名
  • 4,from 模块名 import 功能名 as 别名
    调用: 直接拿别名来用
  • 5,from 模块名 import * (用 * 号 一次性导入所有功能)
    调用:直接功能名
    注意点:* 号没法用别名

2,模块的搜索路径

sys.path 返回导入模块时的搜索路径集,是一个list列表。

这里写图片描述

  • 从上面列出的目录里依次查找要导入的模块文件
  • ’ ’ 表示当前路径
  • 列表中的路径的先后顺序代表了python解释器在搜索模块时的先后顺序

可以添加新的模块:

  • sys.path.append(‘/home/python/xxx’)
  • sys.path.insert(0, ‘/home/python/xxx’) # 可以确保先搜索这个路径
  • 注意点:sys.path.append(path)和sys.path.insert(path)添加的相关路径,在退出交互式环境或者IDE后会自动消失。
In [37]: sys.path.insert(0,"/home/python/xxxx")
In [38]: sys.path
Out[38]:
['/home/python/xxxx',
 '',
 '/usr/bin',
 '/usr/lib/python35.zip',
 '/usr/lib/python3.5',
 '/usr/lib/python3.5/plat-x86_64-linux-gnu',
 '/usr/lib/python3.5/lib-dynload',
 '/usr/local/lib/python3.5/dist-packages',
 '/usr/lib/python3/dist-packages',
 '/usr/lib/python3/dist-packages/IPython/extensions',
 '/home/python/.ipython']
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3,重新导入模块

模块被导入后,import module不能重新导入模块,重新导入需用reload

创建一个reload_test.py文件,里面写一个test方法

这里写图片描述

打开 ipython 终端导入 reload_test 模块

这里写图片描述

修改reload_test.py 文件中的test方法

这里写图片描述

再一次import reload_test 模块 然后调用test方法会发现值没变
这里写图片描述

原因:import 导入模块只会导入一次,因此即使模块被修改了,import也不会重新导入
解决方案

  1. 关闭终端,重新打开,然后再import 导入一次
  2. 用 reload 可以在不关闭终端的情况下重新导入

这里写图片描述

4,多模块开发时,要注意修改导入模块的值时,from……import 与 import 导入模块的区别

main.py

from send import *
from show import *

# 主流程
def main():
    # 发女朋友
    send()
    # 秀恩爱
    show()


if __name__ == '__main__':
    main()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

send.py

#import girl
from girl import *

# 发女朋友
def send():
    print("发女朋友了,翠花是你的了")
    #girl.have_girl = True
    have_girl = True
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

show.py

# import girl
from girl import *

# 秀恩爱
def show():
    if have_girl == True:
    #if girl.have_girl == True:
        print("我有女朋友了,好开心")
    else:
        print("单身贵族")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

girl.py

# 共同变量模块

have_girl = False #False代表没有女朋友 True代表有女朋友
  • 1
  • 2
  • 3

运行结果:

发女朋友了,翠花是你的了
单身贵族
  • 1
  • 2

是不是有点惊讶?结果难道,不应该是这样的吗:

发女朋友了,翠花是你的了
我有女朋友了,好开心
  • 1
  • 2

会产生这种情况的原因:
import girl 可以理解为地址的复制,也就是 引用 用来修改值
from girl import * 可以理解成内容的复制,也就是深拷贝,那么深拷贝有什么特点,深拷贝最大的特点就是数据独立。
这里写图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/657924
推荐阅读
相关标签
  

闽ICP备14008679号