继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Python中的导入模块

德玛西亚99
关注TA
已关注
手记 410
粉丝 92
获赞 559

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']

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()

send.py

#import girlfrom girl import *# 发女朋友def send():
    print("发女朋友了,翠花是你的了")    #girl.have_girl = True
    have_girl = True

show.py

# import girlfrom girl import *# 秀恩爱def show():
    if have_girl == True:    #if girl.have_girl == True:
        print("我有女朋友了,好开心")    else:
        print("单身贵族")

girl.py

# 共同变量模块have_girl = False #False代表没有女朋友 True代表有女朋友123

运行结果:

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

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

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

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

原文出处

       


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP