zoukankan      html  css  js  c++  java
  • python核心编程笔记--模块的导入

     1. 模块的重新导入

    有这样的一种情况:我们首先创建了一个.py文件,输入模块代码。保存后,我们进入ipython3的环境,引入这个模块。然后再ipython3环境外修改这个模块文件,在ipython3的环境中引入的模块文件会不会相应发生变化?

    答案是:不会同步发生变化,需要重新引入

    示例过程如下:

    1.1 打开终端,新建一个.py文件,并简单输入一个print语句:

    1.2 新开一个终端,在同一个目录输入ipython3命令,并引入test.py模块,进行测试

    1.3 在原来创建test.py的终端修改test.py文件,此时ipython3的窗口不能关闭

    1.4 再在之前的ipython3的窗口里,调用模块中的方法,看是否输出second

    结论是:外层修改后,没有同步发生变化,由上图可以看出,在未关闭的情况下,即便是重新再引入一遍,还是没有同步改变。

    解决方法

    a. 需要关闭impyhon3环境,重新导入

    b. 使用reload

    关于reload的用法,它属性imp模块,文档详情如下图所示:

    至于为什么需要reload(),我们可以理解为,IPython3在第一次import的时候会去找你import的模块文件,然后就会把它放在某个地方,这样下次就不会再去找了。因此如果在外层修改了,里面是没有读取到修改后的文件的。

    大家可以思考下,如果先打开一个IPyhon3的环境,然后重新打开一个终端,在相同目录新建一个模块文件,再回到之前打开的IPython3环境,我们可以直接import刚刚新建的模块吗?[根据上面的解释,显然是可以的,可以动手尝试下]

     2. 关于python中引入模块文件方式的说明

    当我们输入import 模块文件名 时,python是怎么找到模块文件的?如果找不到,python会报No modeule named '模块文件名'的错误

    在ipython3的环境下,引入sys模块,里面有个变量,叫sys.path。这个变量是一个列表,它每一个元素存储的就是模块搜索的路径。搜索顺序是按结果顺序。

    如果我们想在其他目录加入模块,则可以sys.path.append('目录')即可。即如果想对搜索路径做任何操作,比如修改顺序,添加目录,都只需要对sys.path(列表)操作即可。

    目录路径以 / 开着

    相对目录不以 / 开头

    3. 模块的循环导入

    a模块中引入了b,b模块中引入了a,结果会怎样?

    答案是会报错

    解决办法:抽取一个模块,专门用来调用,需要a就调用a,需要b就调用b

  • 相关阅读:
    AQS的子类在各个同步工具类中的使用情况
    SpringBoot RabbitMQ 延迟队列代码实现
    Java线程状态、线程start方法源码、多线程、Java线程池、如何停止一个线程
    Java内存模型,为啥线程要有自己的本地内存,CPU高速缓存
    Java内存模型中volatile关键字的作用
    Java内存模型、JVM内存结构和Java对象模型
    搞定springboot项目连接远程服务器上kafka遇到的坑以及完整的例子
    MongoDB导出与导入远程Linux服务器上的数据
    DeferredResult使用方式和场景
    【IT笔试面试题整理】二叉树中和为某一值的路径--从根到叶子节点
  • 原文地址:https://www.cnblogs.com/yrrAwx/p/8192002.html
Copyright © 2011-2022 走看看