模塊:編寫的別的程序中重用一些代碼。
1 模塊的寫法:
- 創建一個.py文件,該文件中包含函數與變量。
- 使用撰寫python解釋器本身的本地語言來編寫模塊。比如使用C代碼編寫python模塊,并且在編譯后,可以通過標準的python解釋器在你的python代碼中使用它們。
2 使用標準庫模塊例子(sys 模塊包含了與 Python 解釋器及其環境相關的功能,也就是所謂的系統功能( system) ),代碼如下:
import sys print('The command line arguments are:') for i in sys.argv:print(i) print('\n\nThe PYTHONPATH is', sys.path, '\n') #程序輸出 The command line arguments are: F:/python/demo/test.pyThe PYTHONPATH is ['F:\\python\\demo', 'F:\\python\\demo', 'C:\\Windows\\system32\\python34.zip', 'I:\\Python34\\DLLs', 'I:\\Python34\\lib', 'I:\\Python34', 'I:\\Python34\\lib\\site-packages']
分析:在這一案例中,由于其是一個內置模塊,因此 Python 知道應該在哪里找到它。如果它不是一個已編譯好的模塊,即用 Python 編寫的模塊,那么 Python 解釋器將從它的sys.path 變量所提供的目錄中進行搜索。如果找到了對應模塊,則該模塊中的語句將開始運行,并能夠為你所使用。
你可以直接導入位于當前目錄的模塊。否則,你必須將你的模塊放置在sys.path 內所列出的目錄中。另外要注意的是當前目錄指的是程序啟動的目錄。你可以通過運行 import os;print(os.getcwd()) 來查看你的程序目前所處在的目錄。
3 .pyc文件?
按字節碼編譯的文件。.pyc 文件在你下一次從其它不同的程序導入模塊時非常有用——它將更加快速,因為導入模塊時所需要的一部分處理工作已經完成了。同時,這些按字節碼編譯的文件是獨立于運行平臺的。
注意:這些 .pyc 文件通常會創建在與對應的 .py 文件所處的目錄中。如果 Python 沒有相應的權限對這一目錄進行寫入文件的操作,那么 .pyc 文件將不會被創建。
4 from..import語句。
- 常規用法(包含從同級.py文件中引入函數或者變量):
from math import sqrt print("Square root of 16 is", sqrt(16)) #結果輸出 Square root of 16 is 4.0
?
2 從自定義包中引入包中.py的函數:例如? from mypacket.hello import *
from util import MongoUtil # from util.MongoUtil import *#如果是第一種方法,則使用MongoUtil內部函數時候,需要MongoUtil.function() #如果用第二種方法,則不用加前綴,可以直接使用。
?
5 模塊的__name__屬性
確定模塊是獨立運行的還是被導入進來運行 ,例如:
#在test.py文件中寫入如下代碼: if __name__ == '__main__':print('This program is being run by itself') else:print('I am being imported from another module') #運行以后輸出This program is being run by itself#在同一目錄下新建test2.py文件,輸入 import test #運行以后輸出I am being imported from another module'
6 編寫自己的模塊
#在mymodule.py中寫入如下代碼 def say_hi(): print('Hi, this is mymodule speaking.') __version__ = '0.1'#另一個模塊mymodule_demo.py中寫入如下測試代碼:: import mymodulemymodule.say_hi() print('Version', mymodule.__version__)#另外一種導入方式 from mymodule import say_hi,__version__say_hi() print("version",__version__)
注意:自己的模塊應該放置于與其它我們即將導入這一模塊的程序相同的目錄下,或者放置在sys.path所列出的其中一個目錄下。
7 dir函數
內置的 dir() 函數能夠返回由對象所定義的名稱列表 ,例如;
import sys print(dir(sys)) #結果 ['__displayhook__', '__doc__', '__excepthook__', '__interactivehook__', '__loader__', '__name__', '__package__', '__spec__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_debugmallocstats', '_getframe', '_home', '_mercurial', '_xoptions', 'api_version', 'argv', 'base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dllhandle', 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'getallocatedblocks', 'getcheckinterval', 'getdefaultencoding', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval', 'gettrace', 'getwindowsversion', 'hash_info', 'hexversion', 'implementation', 'int_info', 'intern', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'setcheckinterval', 'setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout', 'thread_info', 'version', 'version_info', 'warnoptions', 'winver']
8 包
變量通常位于函數內部,函數與全局變量通常位于模塊內部。如果你希望組織起這些模塊的話,應該怎么辦?這便是包
包是指一個包含模塊與一個特殊的 __init__.py 文件的文件夾,后者向 Python 表明這一文
件夾是特別的,因為其包含了 Python 模塊
?
注:參考《byte-of-python-chinese-edition》
?