Python裡面開發一些稍微大一點程式的時候,為了編寫可維護的代碼,我們把很多函數分組,分别放到不同的檔案裡,這樣,每個檔案包含的代碼就相對較少,很多程式設計語言都采用這種組織代碼的方式。在Python中,一個.py檔案就稱之為一個子產品(Module)。
Q1 : 那麼如何在程式裡面調用其他的子產品呢?
檔案的結構是這樣的,目前的檔案是main.py,同一個檔案夾裡面還有另外的一個檔案stud.py。
問題是,如何在mian.py檔案裡面,調用stud.py裡面的函數?
image.png
main.py
#也可以寫成import stud as s
import stud
print (" in main ")
#如果寫成了import stud,那麼這裡就要寫成stud.getage()
stud.getage()
stud.getstudent()
stud.py
def getstudent():
print ("func getstudent")
def getage():
print ("func getage")
Q2: from import 和import 的差別
一般情況下盡量使用import a,此時通路B時,可以通過a.B的形式。
有節制的使用from a import B,這樣可以直接使用B。
避免使用from a import *,這種方法會污染命名空間,而且不能直覺的顯示導入哪些對象
#寫成from import的格式
from stud import getstudent
getstudent()
"""#和import的差別
import stud
stud.getstudent()
"""
2. 關于子產品,包概念的解釋
在Python中,一個.py檔案就稱之為一個子產品(Module)。比如剛才的stud.py檔案就是一個名字是stud的子產品。
但是,假如我現在有兩個相同名字的子產品,分别處于不同的檔案裡面,那麼如何區分它們?
Python給出的解決方案是,使用包的概念。方法是選擇一個頂層包名,比如pack目錄下面的teacher子產品,可以寫成pack.teacher
請注意,每一個包目錄下面都會有一個__init__.py的檔案,這個檔案是必須存在的,否則,Python就把這個目錄當成普通目錄,而不是一個包。__init__.py可以是空檔案,也可以有Python代碼。
3. 調用第三方子產品的路徑問題的解釋
當我們試圖加載一個子產品時,Python會在指定的路徑下搜尋對應的.py檔案,如果找不到,就會報錯:
>>> import mymodule
Traceback (most recent call last):
File "", line 1, in
ImportError: No module named mymodule
預設情況下,Python解釋器會搜尋目前目錄、所有已安裝的内置子產品和第三方子產品,搜尋路徑存放在sys子產品的path變量中:
>>> import sys
>>> sys.path
[ 'c:\\Users\\wwwa8\\Desktop\\test', 'C:\\Users\\wwwa8\\AppData\\Local\\Programs\\Python\\Python36-32\\python36.zip', 'C:\\Users\\wwwa8\\AppData\\Local\\Programs\\Python\\Python36-32\\DLLs', 'C:\\Users\\wwwa8\\AppData\\Local\\Programs\\Python\\Python36-32\\lib', 'C:\\Users\\wwwa8\\AppData\\Local\\Programs\\Python\\Python36-32', 'C:\\Users\\wwwa8\\AppData\\Local\\Programs\\Python\\Python36-32\\lib\\site-packages']
image.png
當然,也可以添加搜尋的路徑
#print python 子產品搜尋路徑存
print (sys.path)
#添加要搜尋的目錄
sys.path.append('C:\\Users\\wwwa8\\Desktop')
print (sys.path)
Q3:如何在目前檔案裡面調用處于不同檔案夾裡面的其他子產品?
比如我現在想調用pack和pack1裡面的teacher子產品。
image.png
image.png
image.png
import sys
sys.path.append('C:\\Users\\wwwa8\\Desktop\\test\\pack')
sys.path.append('C:\\Users\\wwwa8\\Desktop\\test\\pack1')
import pack.teacher as t1
import pack1.teacher as t2
t1.getteacher()
t2.getteacherage()
"""或者是:
import pack.teacher
import pack1.teacher
pack.teacher.getteacher()
pack1.teacher.getteacherage()
"""
最後,順便紀念一下錘子科技今天新品釋出會。
1723101005230065AuX8gy1fffhear6h7j30u90f24dr.jpg