Python模塊導入問題

Python模塊導入

項目目錄結構
  
PythonProject                --父目錄
        __init__.py
        main.py
        |    --pac1          --子目錄:pac1
            __init__.py
            f1.py

        |    --pac2          --子目錄:pac2
            __init__.py
            f2.py


注:Python新建一個包時,該目錄下回自動生成一個 __init__.py 文件。

    --f1.py
# -*- coding:utf-8 -*-

def func1():
    print('Hello World!')



    --f2.py
# -*- coding:utf-8 -*

def func2():
    x = 9 + 9
    print(x)



場景:要在 f2 中導入 f1 並調用 f1 中的方法 func1()
①、f1 和 f2 在同級目錄的不同的子目錄中,所以不能直接調用,並且也不能直接調用父目錄的模塊
②、父目錄調用子目錄的模塊、子目錄之間調用模塊,使用如下相同方法

1)方式一:import  PythonProject.pac1.f1    --導入模塊PythonProject.pac1.f1
注:導入後,只能全名訪問模塊屬性    --例如:PythonProject.pac1.f1.func1()
# -*- coding:utf-8 -*
import PythonProject.pac1.f1        # 導入模塊 f1

def func2():
    x = 9 + 9
    print(x)

PythonProject.pac1.f1.func1()       # 調用模塊 f1 中的func1()方法,只能全名訪問模塊屬性 ---PythonProject.pac1.f1.func1()



2)方式二:from  PythonProject.pac1  import f1    --導入模塊PythonProject.pac1.f1
注:導入後,只能以 f1.屬性名訪問模塊屬性
# -*- coding:utf-8 -*
from PythonProject.pac1 import f1      # 導入模塊 f1

def func2():
    x = 9 + 9
    print(x)

f1.func1()      # 導入後,只能以 f1.屬性名 訪問模塊屬性



3)方式三:from  PythonProject.pac1.f1  import func1()    --導入模塊PythonProject.pac1.f1
注:導入後,直接把 func1() 放入當前名稱空間,可直接訪問
# -*- coding:utf-8 -*
from PythonProject.pac1.f1 import func1     # 導入模塊fill

def func2():
    x = 9 + 9
    print(x)

func1()     # 導入後,直接把 func1() 放入當前名稱空間,可直接訪問



4)方式4:from  PythonProject.pac1  import *
注:這個語句的原意圖是想將PythonProject.pac1包下的所有模塊導入到當前的名稱空間.然而,由於不同平臺間文件名規則不同(比如大小寫敏感問題), Python不能正確判定哪些模塊要被導入.這個語句只會順序運行PythonProject和pac1 文件夾下的__init__.py文件. 要解決這個問題,應該在 pac1 文件夾下面的 __init__.py 中定義一個名字all的列表,例如:
# -*- coding:utf-8 -*-
__all__ = ["f1"]                    ---如果還有其他屬性,直接用逗號“,”分隔,一次添加在後面即可  


# -*- coding:utf-8 -*
from PythonProject.pac1 import *     # 導入模塊fill

def func2():
    x = 9 + 9
    print(x)

f1.func1()     # 導入後,通過 f1.屬性名 訪問模塊屬性


                     



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章