先說坑,看懂為什么前面那么多沒有運(yùn)行出來嗎? 這個(gè)是一段代碼 原因很簡(jiǎn)單,這個(gè)代碼是在緩存區(qū)呢,得Ctrl+S 平時(shí)是這樣運(yùn)行,其實(shí)代碼直接從緩存區(qū)到右邊得執(zhí)行區(qū).文本文件并不保存 重定向也正常~ 在目錄下打開一閃而過怎么辦,截圖不易啊 這<用不了 用簡(jiǎn)單的術(shù)語來講,每一個(gè)以擴(kuò)展名py結(jié)尾的Python源代碼文件都是一個(gè)模塊。 導(dǎo)入和重載提供了一種自然的程序啟動(dòng)的選擇,因?yàn)閷?dǎo)入操作將會(huì)在最后一步執(zhí)行文件。從更宏觀的角度來看,模塊扮演了一個(gè)工具庫的角色 從一般意義上來說,模塊往往就是變量名的封裝,被認(rèn)作是命名空間。在一個(gè)包中的變量名就是所謂的屬性:也就是說,屬性就是綁定在特定的對(duì)象上的變量名(就像一個(gè)模塊)。 但是如果真的想要Python在同一次會(huì)話中再次運(yùn)行文件(不停止和重新啟動(dòng)會(huì)話),需要調(diào)用imp標(biāo)準(zhǔn)庫模塊中可用的reload函數(shù) 只在導(dǎo)入時(shí)運(yùn)行一次,記錄已經(jīng)導(dǎo)入的列表,不能重復(fù)導(dǎo)入,即使模塊內(nèi)容已經(jīng)更新. 這種基于模塊的方式使模塊變成了Python程序架構(gòu)的一個(gè)核心概念。更大的程序往往以多個(gè)模塊文件的形式出現(xiàn),并且導(dǎo)入了其他模塊文件的工具。其中的一個(gè)模塊文件設(shè)計(jì)成主文件,或叫做頂層文件(就是那個(gè)啟動(dòng)后能夠運(yùn)行整個(gè)程序的文件)。 這是有意設(shè)計(jì)的結(jié)果。導(dǎo)入是一個(gè)開銷很大的操作,以至于每個(gè)文件、每個(gè)程序運(yùn)行不能夠重復(fù)多于一次。 但是如果真的想要Python在同一次會(huì)話中再次運(yùn)行文件(不停止和重新啟動(dòng)會(huì)話),需要調(diào)用imp標(biāo)準(zhǔn)庫模塊中可用的reload函數(shù). 這里的from語句直接從一個(gè)模塊中復(fù)制出一個(gè)名字。reload函數(shù)載入并運(yùn)行了文件最新版本的代碼,如果已經(jīng)在另一個(gè)窗口中修改并保存了它,那將反映出修改變化。 這允許你在當(dāng)前交互會(huì)話的過程中編輯并改進(jìn)代碼。 例如,這次會(huì)話中,在第一個(gè)import和reload調(diào)用這段時(shí)間里,在script1.py中的第二個(gè)打印語句在另一個(gè)窗口中改成了2**16。 reload函數(shù)希望獲得的參數(shù)是一個(gè)已經(jīng)加載了的模塊對(duì)象的名稱,所以如果在重載之前,請(qǐng)確保已經(jīng)成功地導(dǎo)入了這個(gè)模塊。值得注意的是,reload函數(shù)在模塊對(duì)象的名稱前還需要括號(hào),import則不需要。reload是一個(gè)被調(diào)用的函數(shù),而import是一個(gè)語句。 可以看到,都是正確得結(jié)果. 受不了自帶得解釋器了,沒自動(dòng)補(bǔ)全活不了.ipython走起 把這個(gè)目錄填入到環(huán)境變量里面,為保險(xiǎn)我全局和用戶都填了. 而后記得保存微信文章, 重啟. 別問我這么熟練,問就是愛過 然后新裝python,jupyter內(nèi)核安裝中 終于能用了,繼續(xù) 比你好世界都簡(jiǎn)單得語句,但是已經(jīng)夠了. 可以通過兩種不同的辦法從其他組件獲得這個(gè)模塊的title屬性。第一種,你可以通過使用一個(gè)import語句將模塊作為一個(gè)整體載入,并使用模塊名后跟一個(gè)屬性名來獲取它: 一般來說,這里的點(diǎn)號(hào)表達(dá)式代表了object.attribute的語法,可以從任何的object中取出其任意的屬性,并且這是Python代碼中的一個(gè)常用操作。在這里,我們已經(jīng)使用了它去獲取在模塊myfile中的一個(gè)字符串變量title,即myfile.title。 from是將模塊中的變量復(fù)制進(jìn)來,變成程序中自己的一個(gè)變量或?qū)傩裕钥梢灾苯诱{(diào)用;但如果當(dāng)前程序中存在相同變量名,會(huì)導(dǎo)致變量命名沖突。而import是建立了模塊屬性的引用,變量名是獨(dú)立于當(dāng)前程序而調(diào)用的,需要object. attribute來使用。 import相當(dāng)于抱過來一本書,要進(jìn)一步使用里邊的內(nèi)容就必須首先指定用的是這本書。from相當(dāng)于打開書把里邊某句話摘抄出來拿走用。 無論使用的是import還是from去執(zhí)行導(dǎo)入操作,模塊文件myfile.py的語句都會(huì)執(zhí)行,并且導(dǎo)入的組件(對(duì)應(yīng)這里是交互提示模式)在頂層文件中得到了變量名的讀取權(quán)。也許在這個(gè)簡(jiǎn)單的例子中只有一個(gè)變量名(變量title被賦值給一個(gè)字符串),但是如果開始在模塊中定義對(duì)象,例如,函數(shù)和類時(shí),這個(gè)概念將會(huì)很有用。這樣一些對(duì)象就變成了可重用的組件,可以通過變量名被一個(gè)或多個(gè)客戶端模塊讀取。 在實(shí)際應(yīng)用中,模塊文件往往定義了一個(gè)以上的可被外部文件使用的變量名。 dir函數(shù)獲取內(nèi)部可用得變量名列表 from相當(dāng)于將模塊展開,將其中的標(biāo)識(shí)符(變量名,函數(shù)名,類名等)導(dǎo)入到當(dāng)前文件中,這就可能會(huì)導(dǎo)致名字沖突。import則會(huì)保留模塊的名字空間,訪問其中的標(biāo)識(shí)符時(shí),需要通過模塊名(或別名)限定進(jìn)行訪問,避免了名字沖突。只是這樣需要明確指定模塊名,有時(shí)不方便。 from語句在某種意義上戰(zhàn)勝了模塊的名稱空間分隔的目的,因?yàn)閒rom把變量從一個(gè)文件復(fù)制到另一個(gè)文件,這可能導(dǎo)致在導(dǎo)入的文件中相同名稱的變量被覆蓋 reload是不可傳遞的,你需要記住當(dāng)調(diào)用reload時(shí)需要使用括號(hào),并且要記住讓代碼的最新版本運(yùn)行時(shí)首先要使用reload。 reload是不可傳遞的,重載一個(gè)模塊的話只會(huì)重載該模塊,而不能夠重載該模塊所導(dǎo)入的任何模塊,因此,有時(shí)候必須reload多個(gè)文件。 一種新得執(zhí)行方式 exec調(diào)用有著類似于import的效果,但是,它從技術(shù)上不會(huì)導(dǎo)入模塊,默認(rèn)情況下,每次以這種方式調(diào)用exec的時(shí)候,它都重新運(yùn)行文件,就好像我們把文件粘貼到了調(diào)用exec的地方。因此,exec不需要在文件修改后進(jìn)行模塊重載,它忽略了常規(guī)的模塊導(dǎo)入邏輯。 缺點(diǎn)是,由于exec的工作機(jī)制就好像在調(diào)用它的地方粘貼了代碼一樣,和前面提到的from一樣,對(duì)于當(dāng)前正在使用的變量有潛在的默認(rèn)覆蓋的可能。 相反,基本的import語句每個(gè)進(jìn)程只運(yùn)行文件一次,并且它會(huì)把文件生成到一個(gè)單獨(dú)的模塊名稱空間中,以便它的賦值不會(huì)改變你的作用域中的變量。為模塊名稱空間分隔所付出的代價(jià)是,在修改之后需要重載。
|
|