一、作者感悟
初次用python 的import 模塊的時候我原本以為和java一樣只是一個包的導入,沒想到最后足足用了好久才把python的import模塊弄明白,首先要知道python有三種編碼,一種是面向過程,一種是函數式變成,一種是面向對象,而java只有面向過程和面向對象這兩種,就導致我一直在繞了好久才從python 的import導入繞了出來。
二、初始import
作者理解:
import可以理解成,去把其他文件下 .py結尾的文件代碼,導入當前文件
定義:
模塊:用來從邏輯上組織pthon代碼(變量,函數,類,邏輯:實現一個功能),本質就是.py結尾的文件名
import text#根據上面的定義就可以理解導入一個text.py的文件
那如果過我只是想導入這個文件的某個方法該怎么做
#從 text.py 文件中調用他的name,這個就給看文件當時的具體定義name是一個方法還是一個屬性
from text import name
但上面這種調用作者不支持大家這么使用,舉個例子
from text import name
name="王大傻"
print(name)
這時候系統執行的name是當前本文件的王大傻,還還會是text.py文件內的name屬性,我們可以運行一下
我們在text.py文件下建立了一個變量name賦值text,運行上面的代碼發現輸入的內容是
所以大家知道為什么作者不建議單獨從一個py文件中引入單個方法了吧,容易造成當前文件下如果有同名的,你導入的模塊會失效,為什么會產生這樣的問題
from text import name
name="王大傻"
print(name)
這段代碼可以看成
name=‘text’#相當于from text import name
name="王大傻"
print(name)
聰明的讀者其實反映過來,并不是沒執行只是被覆蓋了
在python import的導入還有一套規則
import sys
print(sys.path)
運行上面的代碼我們發現,其實python引入的包都是存在一個列表中,首相import 會先從當前文件目錄下尋找結果,然后再依次去從python的系統指定的文件尋找,當我們在別的目錄下寫好的包,或者腳本想導入的時候該怎么做,我們可以用append方法將目錄加到sys.path中
既然現在報錯了,我們就用一下append,現在分析一下我們執行的文件在,簡書\文件\ceshi.py,但是我們要導入的模塊text在簡書\text.py下,還記得sys.path執行后打印的結果么,首先去找簡書\文件\文件下有沒有test目錄,然后依次執行系統目錄。
import os
import sys
#找到當前系統的絕對路徑
apath = os.path.abspath(__file__)
#找到當前目錄的上級目錄
up_path1 = os.path.dirname(apath)
up_path2 = os.path.dirname(up_path1)
#添加到當前系統路徑下
sys.path.append(up_path2)
import text
print(text.name)
print(sys.path)
運行后我們發現text可以在ceshi文件中使用了