當前位置:成語大全網 - 書法字典 - Python要求三個條件同時為真。聲明怎麽寫?

Python要求三個條件同時為真。聲明怎麽寫?

首先,假設python提供了幾種開發的參考方法:

1.import語句

從……進口

3._導入_功能

前兩種方法比較常用,_import_ function類似於import語句,但區別在於前者將模塊的名稱作為字符串顯式傳遞,並將其賦給命名空間中的變量。

使用導入時,請註意以下幾點:

(在下面的文章中,A指的是模塊名,而B指的是模塊A中的壹些類名或變量..)

(1)壹般情況下,盡量以導入a的形式為主,比如訪問B時需要使用a.B的形式。

(2)節約使用from a導入B的形式,可以直接訪問B。

(3)盡可能避免使用from import *,因為這樣會汙染命名空間,並且無法明確指出哪些對象是導入的。

為什麽使用導入時要註意以上幾點?在回答這個問題之前,我們先簡單了解壹下Python的導入機制。Python在初始化運行環境時會將壹批內置模塊預加載到內存中,這些模塊的相關信息存儲在sys.modules中,讀者導入sys模塊後,可以在Python解釋器中輸入sys.modules.items()顯示所有預加載模塊的相關信息。當加載壹個模塊時,解釋器實際上必須做以下事情:

1)在sys.modules中搜索,查看該模塊是否已經存在。如果存在,將其導入當前的本地名稱空間,加載就結束了。

2)如果在sys.modules中找不到相應模塊的名稱,則為要導入的模塊創建壹個字典對象,並將對象信息插入sys.modules中..

3)加載前確認模塊對應的文件是否需要編譯,必要時先編譯。

4)執行動態加載,在當前模塊的名稱空間中執行編譯後的字節碼,將所有對象放入模塊對應的字典中。

我們以自定義模塊為例,看看sys.modules和當前本地命名空間的變化。在Python的安裝目錄下創建壹個簡單的模塊testmodule.py:

了解了導入機制之後,我們再來看看,從壹個導入中無節制的使用會帶來哪些問題。

首先,名稱空間的沖突

讓我們看壹個例子。假設有如下三個文件:a.py、b.py和importtest.py其中,A和B都定義了add()函數。當導入測試文件時以從的形式導入添加...進口...同時,哪個函數在導入測試中起作用?

從程序的輸出“add in module B”可以看出,實際起作用的是最近導入的add(),完全覆蓋了當前命名空間之前從A導入的add()o。在項目中頻繁使用來自導入的表單,特別是在大型項目中,會增加名稱空間沖突的可能性,並導致不可預測的問題。因此,有必要使用gom...適度導入語句。壹般來說,在非常明確不會出現命名沖突的前提下,可以考慮在以下情況下使用from……import語句:

(1)當只需要導入壹些屬性或方法時。

(2)模塊中的這些屬性和方法被頻繁訪問,導致以“模塊名”的形式訪問不方便。名”。

(3)模塊的文檔清楚地說明了來自...需要導入,導入壹個包下的子模塊,從...導入可以更簡單方便。如果C使用從io.drivers導入zip,比導入io.drivers.zip更方便。

二、循環嵌套導入的問題

我們先來看下面這個例子:

無論運行上面的哪個文件,都會拋出壹個ImportError異常。這是因為在加載cl.py的過程中,需要新建壹個模塊對象cl,然後執行cl.py對應的字節碼,這時遇到了來自c2導入g的語句,sys.modules中不存在c2,於是創建了c2對應的模塊對象,執行c2.py對應的字節碼。在c2中遇到cl import x的語句時,因為cl已經存在,所以在它對應的字典中查找g,但是cl模塊對象的初始化過程沒有完成,所以它對應的字典中沒有g對象。這時,壹個Importer錯誤:Cannotimport Name G異常被拋出。解決循環嵌套導入問題的壹種方法是直接使用import語句。

母親節快到了,記得給家裏的媽媽打個招呼。