zoukankan      html  css  js  c++  java
  • 模块和包的坑

    什么叫做包:简单点说就是带_init_.py文件的文件夹就是包。当我们去调用这个包的时候其实是优先执行了包里面的_init_文件。而包里面的其他的py文件就是模块

    1.当我们需要直接调用某模块的时候,而又不确定可不可以直接调用时,可以这样操作

    import sys

    print(sys.path)

    查看这个列表的第一项,你当前所在的py文件的文件夹目录就是第一项,而这个文件夹目录下的模块和包就是你可以调用的。

    2。模块和模块之间的互相调用时,只会调用一次,而不会发生重复调用,因为模块一旦被调用成功,就会加入到sys.modules这个字典中,也就是说你在调用模块时,首先python解释器会自动的去找sys.modules这个字典中有没有,有的化就直接用了,不会再去调用一次,所以说模块只会调用一次。

    3.跨包调用问题,就是我他妈的纠结了很久的如何挎包调用模块,这他妈的个根本就做不到,我在这个地方纠结了大量的时间。现在我总算是明白了,现在我写出来提醒我自己,原因如下:

    这是一个路径图,这里我想从c.py里面调用b.py  这是不可以的骚年,这样调用就是不行,别问为什么就是不行,python就是这么规定的,所以记住就行了!!!!!!

    但是我就想执行啊怎么办呢。。

    每当我们遇到这种问题的时候,我们要立马想起两个问题1    你所在的py文件的sys.path的第一个文件夹是什么    2   执行一个包的时候首先要执行这个包下面的_init_文件  。骚年你记住了吗 这两个东西????

    去哦们扯了半天还是没有说该怎么办。。。。我现在就来告诉你!!!!这时候我们仔细观察,发现c.py和b.py分别在mode3 和mode2里面 而这两个包又都在mode1里面   这时候我们只能,对就是只能,只能在和mode1同级别的py文件里面通过执行一系列的关系来让c.py执行b.py。至于具体怎么操作,很简单,就是在每个包里面的_init_文件里写一些调用模块就行了。

    4.绝对路径的模块调用,写法就是在每个包的ini文件里面写清楚调用模块的路径方式,然后到和包同一目录下的py文件里面去执行,但是这样有问题比如说上图中的,mode1的路径发生变化,所有包的init文件里面的路径都要改,所以就有了相对路径的调用。

    5。相对路径的调用,就是和绝对路径的写法是一样的就是把当前py文件的目录换成 . 父目录换成.. 就行了,还有就是前面说的跨目录调用问题,也是只能在外面实现,原因是因为一个py文件不能既当模块执行,又当脚本执行。

  • 相关阅读:
    iOS缓存
    哈希表
    查找
    基数排序
    归并排序
    快速排序
    redis 的高并发的理解
    springboot的理解
    使用maven命令安装jar包到本地仓库
    linux Centos7 安装docker步骤
  • 原文地址:https://www.cnblogs.com/yyyyyyyyyy/p/8972296.html
Copyright © 2011-2022 走看看