- 機械工程師Python編程:入門、實戰與進階
- (西)安琪兒·索拉·奧爾巴塞塔
- 1269字
- 2024-09-10 16:13:02
1.3 導入代碼
假設你有一段Python代碼,需要在多個文件中使用。方法之一是,在每次需要該代碼時,都進行復制和粘貼。這不僅費時而無聊,而且如果你想對代碼做一些改動,則需要打開每一個粘貼有這段代碼的文件,然后以同樣的方式修改它??上攵@樣編寫軟件的效率不高。
幸運的是,Python提供了一個共享代碼的強大功能:模塊導入。當模塊b導入模塊a時,模塊b可以訪問模塊a中的代碼。這使我們可以在某處編寫程序,然后跨文件共享。讓我們以本書第二部分將要編寫的兩個模塊為例。
假設有兩個模塊:point.py和vector.py。這兩個模塊都在前面提到的包中:
第一個模塊point.py定義了幾何基元——點,第二個模塊vector.py定義了另一個幾何基元——向量。圖1-1是兩個模塊的圖示。每個模塊都分為兩個部分:灰色區域代表從其他地方導入的代碼,白色區域代表模塊自身定義的代碼。
現在,假設point.py模塊的某些功能需要使用向量(例如,使用向量移動某個點),我們可以使用Python的import命令訪問vector.py中的向量代碼。圖1-2描繪了這個過程,Python將向量代碼帶到point.py的“導入區”,使它在模塊內部可以被使用。
圖1-1 兩個Python模塊
圖1-2 從vector.py導入Vector類
在圖1-2中,我們使用了如下Python命令:
這個命令只從vector.py中獲取Vector類,不會導入其他任何東西。
下面將會介紹幾種模塊導入方法。
不同的導入形式
為了理解導入模塊和模塊內實體的不同方法,我們需要使用Mechanics項目的兩個包:
在本例中,我們會使用geom2d和eqs包的各兩個文件,或者模塊。每個模塊都定義了一個與模塊同名的類,類名的首字母大寫。例如,point.py模塊定義了Point類,vector.py模塊定義了Vector類,matrix.py模塊定義了Matrix類。圖1-3展示了包的結構。
圖1-3 Mechanics項目中的兩個包和它們的部分模塊
記住這個目錄結構,讓我們分析幾個場景。
(1)導入同一個包的模塊
在geom2d包的point.py模塊中,如果想導入整個vector.py模塊,我們可以使用以下方法:
這樣我們就可以使用vector.py中的內容,如下所示:
請注意,由于我們導入的是整個模塊,而不是它的某個實體,因此我們必須用模塊名稱來指向該模塊中定義的實體。如果想給被引用的模塊一個不同的名稱,我們可以給它重命名:
然后可以這樣使用它:
我們還可以從模塊中導入特定的名稱,而不是整個模塊。正如你前面所看到的,它的語法如下:
使用這種導入方式,我們可以執行如下操作:
在這種情況下,我們還可以重命名導入的名稱:
當我們為一個導入的名稱起別名時,我們只需將其重命名為其他名稱。在本例中,代碼可以寫成如下形式:
(2)導入不同包的模塊
如果想在matrix.py模塊中導入point.py模塊,那么由于point.py在不同的包中,我們可以如下操作:
或者
這讓我們可以在matrix.py中使用point.py模塊的全部內容:
同樣,我們可以對導入的模塊重命名:
或者,等價地:
用這兩種方式,我們都可以使用pt如下:
我們還可以從模塊中導入特定的名稱,而不是整個模塊,如下所示:
與前面一樣,我們可以使用一個別名:
(3)相對導入
最后是相對導入。相對導入(relative import)是指導入模塊所使用的路徑是相對路徑,其起點是文件的當前位置。
我們用一個點(.)指代同一個包內的模塊或包,用兩點(..)指代該包的父級目錄。
同樣是前面的例子,我們可以使用相對導入在matrix.py內導入point.py模塊:
上述代碼中,路徑..geom.point的含義是:從當前的目錄移動到父級目錄,然后定位point.py模塊。
- 劍指JVM:虛擬機實踐與性能調優
- Scratch 3.0少兒編程與邏輯思維訓練
- 高級C/C++編譯技術(典藏版)
- Visual Basic程序設計實驗指導(第二版)
- Learning Concurrency in Kotlin
- 一塊面包板玩轉Arduino編程
- 一本書講透Java線程:原理與實踐
- 硬件產品設計與開發:從原型到交付
- Building Business Websites with Squarespace 7(Second Edition)
- UI設計基礎培訓教程(全彩版)
- Spring Web Services 2 Cookbook
- Processing開發實戰
- 第五空間戰略:大國間的網絡博弈
- Building E-Commerce Solutions with WooCommerce(Second Edition)
- HTML5+CSS3+JavaScript案例實戰