Python模块

参考链接

https://www.cnblogs.com/qi-yuan-008/p/12827918.html

https://zhuanlan.zhihu.com/p/115350758

https://www.jianshu.com/p/73f7fbf75183

https://blog.csdn.net/weixin_40449300/article/details/79327201

包(package)与文件夹(directory)

首先我们需要明白包与文件夹的区别,就比如我们用pycharm右键新建的时候,会有package与directory选项,最开始我是觉得一样的,package无非就是会自动创建一个_ init _.py文件(里面啥都没有,但是你把他删了之后,package自动就会变成directory,最直观的就是图标上的黑点没了)

其实,Python检测到一个目录下存在_ init _.py文件时,就会把它当成一个模块(module),可以为空,也可以有很多内容。

init _.py _ all _ name _ doc import

  1. init_ _.py 文件:这个文件,就像一个标识符一样,用来表明一个文件夹是python包还是一般文件夹,如果文件夹中存在该文件,就是python包

    用途:

    1. 当用于import对象时,可以识别出哪些是可以导入的包,哪些只是一般文件夹
    2. 可以在其中导入需要的对象,然后通过在执行程序中import package来引用这些包,所以简化了执行程序,因为每次导入package的时候会自动执行__init__.py;但最好不要在这里写自己的模块,该文件越简单越好
    3. all _ _参数,只用于指定 from package import * 时,导入的包是哪些,不需要的包可以先不导入;并不影响from package import module/package、import package.module等形式的导入

    注意:该文件可以为空,即不做操作,但是package必须要有这个文件

  2. import:用于导入包、函数、变量、类等;那么import干了些啥?(sys.path是可以修改的,且从package包导入模块需要用 from package import ... 形式)

    img
  3. name :用于判断当前模块是不是主程序文件(主执行),也就是查看 name 的值是否为 ' _ main _ _' ,如果是则该程序属于主程序文件,如果不是则显示该文件的文件名
  4. doc _ _:模块的注释文本,例如函数或者类的说明,用 '''...''' 三引号形式包围
  5. all 只用于控制from package import * 中导入的包,在 init _ _.py中定义

目录结构

Project

directory

directory_a.py

directory_b.py

package

init _ _.py

package_a.py

package_b.py

package_test

init _ _.py

package_test_a.py

package_test_b.py

导入

directory_b.py中导入directory_a.py中的方法

from directory_a import fun_directory_a as fa
from directory.directory_a import fun_directory_a
import directory_a as da
def fun_directory_b():
    print("我是directory_b!")


if __name__ == '__main__':
    fa()
    fun_directory_a()
    da.fun_directory_a()
    
# 注意:不能使用from .directory_a import fun_directory_a,因为使用了相对路径,此时的.directory_a被解析成_ _main_ _.directory_a
# 使用绝对路径即可from directory.directory_a import fun_directory_a(因为directory是当前搜索的根目录,下面会补充)

package_test_b.py中导入package_test_a.py中的方法

from package.package_test.package_test_a import  fun_package_test_a
import package_test_a as pta
from package_test_a import fun_package_test_a as fpta


def fun_package_test_b():
    print("我是package_test_b!")


if __name__ == '__main__':
    fun_package_test_a()
    pta.fun_package_test_a()
    fpta()
    
# 注意:当前搜索的根目录为package

package_b.py中导入package_a.py中的方法

import package_a as pa
from package.package_a import fun_package_a
from package_a import fun_package_a as fpa


def fun_package_b():
    print("我是package_b!")

if __name__ == '__main__':
    pa.fun_package_a()
    fun_package_a()
    fpa()

package_b.py中导入package_test_a.py中的方法

import package_a as pa
from package.package_a import fun_package_a
from package_a import fun_package_a as fpa

from package.package_test.package_test_a import fun_package_test_a


def fun_package_b():
    print("我是package_b!")

if __name__ == '__main__':
    pa.fun_package_a()
    fun_package_a()
    fpa()
    
    fun_package_test_a() 

package_test_b.py中导入package_a.py中的方法

from package.package_test.package_test_a import fun_package_test_a
import package_test_a as pta
from package_test_a import fun_package_test_a as fpta

from package.package_a import fun_package_a

def fun_package_test_b():
    print("我是package_test_b!")


if __name__ == '__main__':
    fun_package_test_a()
    pta.fun_package_test_a()
    fpta()

    fun_package_a()

directory_b.py中导入package_a.py中的方法

from directory_a import fun_directory_a as fa
from directory.directory_a import fun_directory_a
import directory_a as da

import sys
import os
sys.path.append(os.path.abspath(r'~/PycharmProjects/MVA'))

from package.package_a import fun_package_a

def fun_directory_b():
    print("我是directory_b!")


if __name__ == '__main__':
    fa()
    fun_directory_a()
    da.fun_directory_a()

    fun_package_a()
    
 # 注意:需要先添加搜索路径
最后修改:2022 年 07 月 19 日
如果觉得我的文章对你有用,请随意赞赏