天天看點

import java.io 包下載下傳_Python中的import原理與應用

今天我們來初步認識下import,同時區分一下子產品、包、庫的概念。 先來認識一個名詞:子產品(module)。 子產品在本質上是一個.py檔案,引入子產品,也就是引入了一段Python代碼到你的程式中。程式設計時,适當代碼分離會顯得程式結構比較清晰,更重要的是可以實作代碼複用。系統内置子產品或者第三方子產品,也是提供給我們來複用的,隻不過人家的代碼更加成熟、穩定。 既然本質都是一樣的,我們就自己來寫一個py檔案,給另一個py調用。 例如:如果我們寫一個檔案讀寫子產品filePro.py,裡面就一個函數pf。(請大家不要過于拘泥于裡面具體的代碼,我隻是舉個例子,順手寫了一點,主要看它如何被引入調用,真正的子產品多數是用面向對象來寫的 )。

import java.io 包下載下傳_Python中的import原理與應用

于是在main.py中就可以這樣來引入使用:

import java.io 包下載下傳_Python中的import原理與應用

或者這樣起個别名再引入使用:

import java.io 包下載下傳_Python中的import原理與應用

或者使用from引入,幹脆别名都不用寫:

import java.io 包下載下傳_Python中的import原理與應用

但是平常盡量不要import *,這樣把py所有代碼都引入了,會減慢運作速度,我們可以針對性的引入要使用的變量、函數等。 設想一下,如果我們積累了幾百個py檔案供我們調用,我們在使用的時候,總不能一鍋粥裡去挑吧?估計命名再準确也得眼暈了。那能不能和電腦處理檔案一樣,建立檔案夾來分類、分級管理呢?當然可以,于是就有了所謂“包”(package)的概念。 我們同樣也自己實驗一下。比如我們還有個檔案叫dirPro.py,是用來處理檔案夾的,裡面有個判斷檔案是否存在的功能。

import java.io 包下載下傳_Python中的import原理與應用

假定我認為,它和剛才的檔案處理是有一定關系的,屬于我寫的同一類子產品,那就可以扔到一個檔案夾裡去,作為同一個包裡的檔案。 于是就有了接下來的目錄結構:

import java.io 包下載下傳_Python中的import原理與應用

我們隻要在file檔案夾裡建立一個__init__.py檔案(空):

import java.io 包下載下傳_Python中的import原理與應用

就可以愉快的調用了:

import java.io 包下載下傳_Python中的import原理與應用

當然,真正系統内置或第三方的包,絕不是這麼簡單,它的init檔案裡會有一些說明資訊。而且那些包,都是添加到一個預設的Python能 的搜尋位置。具體是哪裡呢?我們打開python安裝的位置去找找呗,看到lib檔案夾了嗎?打開看一下,是不是似曾相識?

C:\Users\Pansk\AppData\Local\Programs\Python\Python37-32\Lib:

import java.io 包下載下傳_Python中的import原理與應用
import java.io 包下載下傳_Python中的import原理與應用

沒錯這些就是系統内置的包或子產品,而第三方下載下傳的包或者子產品(一般都是包,畢竟是全世界都在用的功能,一個子產品很難滿足),都在這裡面的site-package裡面:

import java.io 包下載下傳_Python中的import原理與應用

-----------------------------------------------------------------------

好了,是時候梳理一下概念了:

Python的子產品,就是一個.py檔案。

Python的包,就是一個檔案夾,裡面是同一系列的子產品集合。

Python的庫,是對子產品和包的一個統稱。嚴格來說是從其它語言習慣性轉過來的一個籠統的叫法。

順便,回顧下import的寫法吧:

引入子產品:import  random  用法如 random.randint(1,10)

引入子產品并起别名:import  turtle as  t 用法如 t.forward(50)

引入子產品中的對象:

  1. from random import randint  這樣直接randint(1,10)就行
  2. from random import *  同上,但浪費加載時間
  3. import random.randint  這樣直接引入子產品.對象是錯誤的

引入包裡的子產品:

  1. import pygame.locals
  2. from pygame import locals

引入包裡的子產品裡的對象:

from pygame.locals import  *

怎麼樣,大家是不是對“Python的庫的引入”這一部分有一點清晰的認識了呢?有時候,對于程式的寫法,真的不是“記住就行”就真的行了,最好能了解一下背後的機制,才能真正做到“它強任它強,清風拂山崗”。