• 不同包的调用


    在python中,包package的物理层面对应文件夹,模块model的物理层面对应程序文件.

    1 如果一个文件夹中有__init__.py文件,则python不会认为它是一个普通的文件夹,而是一个package,在__init__.py程序中用于存放它所在package的顶层目录(即到它的父目录),为了其它包调用它的时候,python解释器可以找到它.

    当一个包中没有__init__.py文件的时候,也可以,只不过其它程序想要调用这个package中的程序时,需要在开头把该package所在的顶层目录加上.

    2 当一个package内的程序互相调用的时候,直接import即可,无需导入写路径.

    3 当程序运行开头的导入包时,会执行该包下的__init__.py程序,例如如果__init__.py程序中有print('kkk')时,会输出.

     first程序

    # import sys
    # # 将的上级文件夹绝对路径导入临时系统变量
    # sys.path.append("/home/sxtj/han/推荐系统/program")
    
    import os,sys
    #这里是把顶层目录加入到python的环境变量中。
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    print(BASE_DIR)
    sys.path.append(BASE_DIR)
    
    from product import *
    from package2 import quotient
    
    a = product(2,4)
    print(a)
    b = quotient.quotient(10,5)
    print(b)
    # /home/sxtj/han/推荐系统/program
    # 8
    # 0.5
    first.py

     product程序

    def product(x, y):
        return x*y
    product.py

     quotient程序

    def quotient(x, y):
        return y/x
    quotient.py

     用__init__.py程序时,可不用导入顶层目录来找模块.

    如上用main.py调用test1.py和test2.py程序的时候,要提前在各自的__init__.py文件下声明,这样导入t1和t2包的时候,才能找到它们下面的模块和函数.

    main程序

    #!/usr/bin/env python 
    # encoding: utf-8 
    
    import pandas as pd
    import warnings
    import t1.t11.test1 as model1
    import t2.test2 as model2
    warnings.filterwarnings("ignore")
    
    def func():
        pass
    class Main():
        def __init__(self):
            pass
    if __name__ == "__main__":
        model1.func()
        model2.func()
        df1=pd.read_csv('./cache/df1.csv')
        df2=pd.read_csv('./cache/df2.csv')
        df3=df1.copy()
        df3['value']=df1['value'].values*0.3+df2['value'].values*0.7
        df3.to_csv('./cache/df3.csv',index=False)
    View Code

    test1程序

    #!/usr/bin/env python 
    # encoding: utf-8
    import pandas as pd
    import numpy as np
    import os
    import warnings
    warnings.filterwarnings("ignore")
    
    a = os.listdir('./')
    print(a)
    # ['cache', 't2', 'all_program.py', 't1']
    # 特别要注意这里的文件输出的是main.py程序所在目录下的文件,
    # 因为在main.py中调用的时候,这行程序相当于在main.py中运行
    def func():
        print(11)
        df=pd.DataFrame(np.random.randint(0,100,(10,2)),columns=['id','value'])
        df['filename']=1
        df.to_csv('./cache/df1.csv')
    class Main():
        def __init__(self):
            pass
    if __name__ == "__main__":
        print(1)
    View Code

    t1文件夹下的__init__.py

    # 参数__all__用于声明本文件夹下的模块和函数,
    # 其他程序导入该文件夹时才能找到里面的程序文件.
    __all__ = ['test1']
    View Code

    test2程序

    #!/usr/bin/env python 
    # encoding: utf-8
    import pandas as pd
    import numpy as np
    import warnings
    warnings.filterwarnings("ignore")
    
    def func():
        print(22)
        df = pd.DataFrame(np.random.randint(0, 100, (10, 2)), columns=['id', 'value'])
        df['filename'] = 2
        df.to_csv('./cache/df2.csv')
    class Main():
        def __init__(self):
            pass
    if __name__ == "__main__":
        print(2)
    View Code

    def quotient(x, y):
        return y/

    参考:https://www.cnblogs.com/keep-going2099/articles/8178387.html#_label1

              https://www.cnblogs.com/yinzhengjie/p/8587656.html

              https://blog.csdn.net/XuZZ94/article/details/79669313

  • 相关阅读:
    JS基础学习
    Java_iText_PDF—生成PDF工具
    vc++ 编译连接错误and解决方法
    C++ 数据类型【转】
    jsp两种include指令区别
    程序员面试宝典问题及解析
    vc++6.0快捷键
    vue动态绑定图片和背景图
    配置webpack中dev.env.js、prod.env.js,解决不同命令下项目启动和打包到指定的环境
    配置webpack中externals来减少打包后vendor.js的体积
  • 原文地址:https://www.cnblogs.com/xxswkl/p/11727973.html
Copyright © 2020-2023  润新知