模块概念与使用及注意事项
1 模塊概念
模塊就是包含了python代碼的文本文件,通俗講,一個py文件就是一個模塊。
?
2 使用模塊(import)
?
比如,我們單獨編寫了一個模塊,命名為mymodule.py,在該模塊中我們定義一些函數和類,我們如何在test.py中使用呢?答案是使用import.
mymodule.py內容如下:
| #Person類 class Person(object): ??? def __init__(self,name,age): ??????? self.name = name ??????? self.age = age ? ??? def showPerson(self): ??????? print("Name:%s Age:%d"%(self.name,self.age)) ? #函數 def myAdd(a,b): ??? ret = a + b ??? return ret |
test.py如下:
| #引入mymodule模塊 import mymodule ? #使用mymodule模塊中的myAdd函數 #注意在使用mymodule中的符號的時候,必須指定模塊名.符號的方式 ret = mymodule.myAdd(10,20) print("ret = %d"%ret) ? #使用mymodule模塊中的Person類 person= mymodule.Person("Edward",22) person.showPerson() |
?
不僅可以引入函數,還可以引入一些全局變量、類等.
為什么必須加上模塊名調用呢?
因為可能存在這樣一種情況:在多個模塊中含有相同名稱的函數,此時如果只是通過函數名來調用,解釋器無法知道到底要調用哪個函數。所以如果像上述這樣引入模塊的時候,調用函數必須加上模塊名.
3 使用模塊(from...import...)
有時候我們只需要用到模塊中的某個函數,只需要引入該函數即可.通過這種方式引入的時候,調用函數時只能給出函數名,不能給出模塊名,但是當兩個模塊中含有相同名稱函數的時候,后面一次引入會覆蓋前一次引入。也就是說假如模塊A中有函數function( ),在模塊B中也有函數function( ),如果引入A中的function在先、B中的function在后,那么當調用function函數的時候,是去執行模塊B中的function函數。如果想一次性引入math中所有的東西,還可以通過from math import *來實現
| #引入mymodule模塊中的myAdd函數 from mymodule import? myAdd ? #使用mymodule模塊中的myAdd函數 #注意不可添加模塊名 ret = myAdd(10,20) print("ret = %d"%ret) ? #使用mymodule模塊中的Person類出錯 #person= mymodule.Person("Edward",22) #person.showPerson() |
使用import xxx import *
| #引入mymodule模塊中的所有符號 from mymodule import * ? #使用mymodule模塊中的myAdd函數 #注意不可添加模塊名 ret = myAdd(10,20) print("ret = %d"%ret) ? #使用mymodule模塊中的Person類出錯 person= Person("Edward",22) person.showPerson() |
這提供了一個簡單的方法來導入一個模塊中的所有項目。然而這種聲明不該被過多地使用。
?
4 使用模塊(import...as...)
將引入的模塊重新命名:
| #引入mymodule并重新命名為md #此時再使用mymodule就會未定義 import mymodule as md ? #使用mymodule模塊中的myAdd函數 #注意不可添加模塊名 ret = md.myAdd(10,20) print("ret = %d"%ret) ? #使用mymodule模塊中的Person類出錯 person= md.Person("Edward",22) ? person.showPerson() |
?
5 定位模塊
當你導入一個模塊,Python解析器對模塊位置的搜索順序是:
- 當前目錄。
- 如果不在當前目錄,Python則搜索在shell變量PYTHONPATH下的每個目錄。
- 如果都找不到,Python會察看默認路徑。UNIX下,默認路徑一般為/usr/local/lib/python/
- 模塊搜索路徑存儲在system模塊的sys.path變量中。變量里包含當前目錄,PYTHONPATH和由安裝過程決定的默認目錄。
- ?
6 __name__變量
| #引入mymodule并重新命名為md #此時再使用mymodule就會未定義 import mymodule as md ? #使用mymodule模塊中的myAdd函數 #注意不可添加模塊名 ret = md.myAdd(10,20) print("ret = %d"%ret) ? #使用mymodule模塊中的Person類出錯 person= md.Person("Edward",22) person.showPerson() |
?
當我們執行此py文件的時候,由于此py文件包含了mymodule.py,導致mymodule中的測試程序也被執行了.
可以根據__name__變量的結果能夠判斷出,是直接執行的python腳本還是被引入執行的,從而能夠有選擇性的執行測試代碼.
7 模塊中的__all__
?
如果一個文件中有__all__變量,當使用fromxxx import *時導入的時候,只能導入__all__中的符號,其余符號導入失敗.
總結
以上是生活随笔為你收集整理的模块概念与使用及注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pandas数据分析选则接近数值的最接优
- 下一篇: 自动摘要