Python函數-導入模塊的順序及原理


引入

當python導入模塊,執行import語句時,到底進行了什么操作?按照python的文檔,她執行了如下的操作:

第一步,創建一個新的module對象(它可能包含多個module)

第二步,把這個module對象插到sys.module中

第三步,裝載module的代碼(如果需要,則必須先編譯)

第四步,執行新的module中對應的代碼。

在執行第三步時,首先需要找到module程序所在的位置,搜索的順序是:

當前路徑(以及從當前目錄指定的sys.path),pythonpath,然后是python安裝時設置的相關默認路徑。正因為存在這樣的順序,所以如果當前路徑或pythonpath中存在與標准module相同的module,則會覆蓋標准module。也就是如果當前目錄下存在xml.py,那么執行import xml時,導入的是當前目錄下的module,而不是系統標准的xml。所以我們平常起名字時不能亂起。

了解這些之后,我們就可以先構建一個package,以普通module的方式導入,這樣就可以直接訪問此package中的各個module。python2中package必須包含一個__init__.py的文件。擁有這個文件使得python解釋器將子目錄整個也當成一個模塊,然后直接通過“import 子目錄.模塊”導入即可。如果沒有這個文件就會被當成一個普通文件夾,而不是模塊。

一、模塊

什么是模塊?

       模塊實質上就是一個python文件,它是用來組織代碼的,意思就是說把python代碼寫到里面,文件名就是模塊的名稱,test.py test就是模塊名稱。

       模塊分為三種:

  • 自定義模塊
  • 內置標准模塊:python自帶的
  • 開源模塊(第三方)

       導入模塊的本質,就是把python文件拿過來執行一次。

1、import導入

      我有倆文件a.py和b.py,運行b.py,獲得a里面得內容:

復制代碼
name='a.py' def func(): print('這個是a.py里面的函數') for i in range(5): print(i) func()
import a #import一個模塊,就是把這個模塊里的代碼執行一遍
復制代碼

運行結果:

復制代碼
0 1 2 3 4 這個是a.py里面的函數
復制代碼

也可起別名:

復制代碼
name='a.py' def func(): print('這個是a.py里面的函數')
import a as apy # 起別名 print(apy.name) apy.func()
復制代碼

運行結果:

a.py 這個是a.py里面的函數

 2、  if __name__=='__main__'   的運用

       # if __name__=='__main__':#在自己里執行是__name__;在別家執行是a(文件名)

復制代碼
name = 'a.py' def func(): print('這個是a.py里面的函數') print(__name__) if __name__ == '__main__': # 在自己里執行是__name__; # 在別家執行是a(文件名) for i in range(5): func()
import a   

print(a.name) a.func()
復制代碼

運行結果:

復制代碼
__main__ 這個是a.py里面的函數 這個是a.py里面的函數 這個是a.py里面的函數 這個是a.py里面的函數 這個是a.py里面的函數
a
a.py 這個是a.py里面的函數
復制代碼

3、from導入,跟上面一樣一樣的 

(1)用from導入func

復制代碼
name = 'a.py' def func(): print('這個是a.py里面的函數') print(__name__) if __name__ == '__main__': # 在自己里執行是__name__; # 在別家執行是a(文件名) for i in range(5): func()
from a import func # 用from導入func  func()
復制代碼

運行結果:

a
這個是a.py里面的函數

(2)用from導入func和name

復制代碼
name = 'a.py' def func(): print('這個是a.py里面的函數') print(__name__) if __name__ == '__main__': # 在自己里執行是__name__; # 在別家執行是a(文件名) for i in range(5): func()
from a import func, name # 用from導入func和name  func() print(name)
復制代碼

運行結果:

a
這個是a.py里面的函數 a.py

二、導入模塊的順序:
       1、從當前目錄下找
       2、從python的環境變量里面找
            import一個文件夾的時候,就是執行這個文件夾下面的__init__.py

復制代碼
import sys

print(sys.path) # 環境變量 sys.path.append(r'C:\Users\79954\PycharmProjects\ssz\day5') # r 源字符 加環境變量,加的時目錄 sys.path.insert(0, r'C:\Users\79954\PycharmProjects\ssz\day5') # insert指定位置
復制代碼

運行結果:

['C:\\Users\\79954\\PycharmProjects\\ssz\\day5', 'C:\\Users\\79954\\PycharmProjects\\ssz', 'C:\\Program Files\\JetBrains\\PyCharm 2020.1.4\\plugins\\python\\helpers\\pycharm_display', 'C:\\Users\\79954\\AppData\\Local\\Programs\\Python\\Python37-32\\python37.zip', 'C:\\Users\\79954\\AppData\\Local\\Programs\\Python\\Python37-32\\DLLs', 'C:\\Users\\79954\\AppData\\Local\\Programs\\Python\\Python37-32\\lib', 'C:\\Users\\79954\\AppData\\Local\\Programs\\Python\\Python37-32', 'C:\\Users\\79954\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages', 'C:\\Program Files\\JetBrains\\PyCharm 2020.1.4\\plugins\\python\\helpers\\pycharm_matplotlib_backend', 'C:\\Users\\79954\\PycharmProjects\\ssz\\day5']

     如以上運行結果所示:Pycharm也會自動幫咱加了環境,所以我們就可以導入ssz這個目錄下的任何目錄及文件了:

一個例子:

復制代碼
from day5 import tools #我們就可以導入ssz下的任何一個目錄,pycharm會有提示 print(tools.test('s'))
def test(s): return s + 'hhhhhhh'
復制代碼

運行結果:

shhhhhhh

再來一個例子:

from day2 import HelloWold

運行結果:

hello word 蔡蔡長得非常 "帥氣、高大威猛" let'go,昌姐美麗又漂亮,因為是個“人妖”!!!

導入目錄其他方式:

復制代碼
import sys

# import day5 # result = day5.tools.test('ggg') # 報錯(AttributeError: module 'day5' has no attribute 'tools') from day5 import tools # 這種方式沒問題 print(tools.test('ggg')) from day5.tools import test # 這種方式沒問題 result = test('ggg') print(result)
def test(s): return s + 'hhhhhhh'
復制代碼

運行結果:

ggghhhhhhh
ggghhhhhhh

例子:

1,在day6目錄下建一個__init__.py,寫點內容(一般創建文件夾自帶了)
2,在day5目錄下的a.py里面import day5
__init__
結果: import 一個文件夾時,就是執行這個文件夾下的__init__.py

1)、我們首先在day6下建一個tools.py

def test(s): return s + 'hhhhhhh' def test2(): print('ooooo')

2)然后在day5文件下建目錄文件.py

import day6
result = day6.tools.test('xxx') day6.tools.test2() #可多個導入 print(result)

運行結果:

__init__
ooooo
xxxhhhhhhh

三、第三方模塊安裝:

  •   python的安裝目錄
  •   python安裝目錄下面的scripts目錄

首先,得確定環境是否正常(pip --help):

 1、手動安裝

2、帶 .whl 結尾的需找到安裝路徑:pip install /Users/........

3、zip文件

  • 先解壓
  • 進入解壓目錄
  • python setup.py install


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM