1. 程式人生 > >重修課程day25(面向對象6之模塊與包)

重修課程day25(面向對象6之模塊與包)

pipe mis lee nta win oca keyboard day2 environ

一 模塊

 1 什麽叫做模塊:一個py文件就是一個模塊

  模塊的分類:內置模塊,第三方模塊和自定義模塊

  內置模塊:在python產生是就有的模塊叫做內置模塊,我們只管拿來調用即可

  第三方模塊:別人已經定義好了的模塊,我們只管下載安裝一下就可以調用

  自定義模塊:自己定義的模塊叫做自定義模塊,根據自己設置的調用方式調用

 2 導入模塊的順序:內置模塊;第三方模塊;自定義模塊

  導入模塊的規則是:建議不在同一行導入多個模塊

  模塊的命名空間:模塊有模塊的命名空間,存在於當前模塊的py文件裏

  在導入模塊的第一時間就會創建模塊的命名空間

 3 給模塊重命名:as重命名 格式 :from 模塊名 import 方法名 as 修改後的名字

技術分享

from lianxi import func1 as func_1
func_1()

技術分享

  *:是引用模塊下面的所有功能,但是不能重命名 格式 : from 模塊名 import *

   __all__=[ ]:與*號相通的,中括號裏面的內容是啥,*號導入的功能就會相對應的。中括號裏面的內容格式必須是字符串的格式。

技術分享技術分享技術分享

  導入模塊的幾種格式:1 import 模塊名

            2 from 模塊名 import 具體功能名

            3 from 模塊名 import *

技術分享

# import lianxi
# from lianxi import func
# from lianxi import *

如果導入的模塊內容過長,卻使用的功能很少,建議使用第二種的調用方式。

  模塊與模塊之間只要一次導入,就可以多次調用。

技術分享

import lianxi
a=333
def func():
    aa=lianxi.time.time()
    lianxi.time.sleep(1)
    print(444)
    print(lianxi.time.time()-aa)
func()

技術分享

 4 sys.modules:查看當前已經導入了的所有模塊。

import sys
import lianxi
a=333
def func():
    aa=lianxi.time.time()
    lianxi.time.sleep(1)
    print(444)
    print(lianxi.time.time()-aa)
func()
print(sys.modules)



結果是:
{‘builtins‘: <module ‘builtins‘ (built-in)>, ‘sys‘: <module ‘sys‘ (built-in)>, ‘_frozen_importlib‘: <module ‘_frozen_importlib‘ (frozen)>, ‘_imp‘: <module ‘_imp‘ (built-in)>, ‘_warnings‘: <module ‘_warnings‘ (built-in)>, ‘_thread‘: <module ‘_thread‘ (built-in)>, ‘_weakref‘: <module ‘_weakref‘ (built-in)>, ‘_frozen_importlib_external‘: <module ‘_frozen_importlib_external‘ (frozen)>, ‘_io‘: <module ‘io‘ (built-in)>, ‘marshal‘: <module ‘marshal‘ (built-in)>, ‘nt‘: <module ‘nt‘ (built-in)>, ‘winreg‘: <module ‘winreg‘ (built-in)>, ‘zipimport‘: <module ‘zipimport‘ (built-in)>, ‘encodings‘: <module ‘encodings‘ from ‘E:\\python3.6\\lib\\encodings\\__init__.py‘>, ‘codecs‘: <module ‘codecs‘ from ‘E:\\python3.6\\lib\\codecs.py‘>, ‘_codecs‘: <module ‘_codecs‘ (built-in)>, ‘encodings.aliases‘: <module ‘encodings.aliases‘ from ‘E:\\python3.6\\lib\\encodings\\aliases.py‘>, ‘encodings.utf_8‘: <module ‘encodings.utf_8‘ from ‘E:\\python3.6\\lib\\encodings\\utf_8.py‘>, ‘_signal‘: <module ‘_signal‘ (built-in)>, ‘__main__‘: <module ‘__main__‘ from ‘E:/pycharm/pycharm/PyCharm Community Edition 2017.1.3/day27/練習.py‘>, ‘encodings.latin_1‘: <module ‘encodings.latin_1‘ from ‘E:\\python3.6\\lib\\encodings\\latin_1.py‘>, ‘io‘: <module ‘io‘ from ‘E:\\python3.6\\lib\\io.py‘>, ‘abc‘: <module ‘abc‘ from ‘E:\\python3.6\\lib\\abc.py‘>, ‘_weakrefset‘: <module ‘_weakrefset‘ from ‘E:\\python3.6\\lib\\_weakrefset.py‘>, ‘site‘: <module ‘site‘ from ‘E:\\python3.6\\lib\\site.py‘>, ‘os‘: <module ‘os‘ from ‘E:\\python3.6\\lib\\os.py‘>, ‘errno‘: <module ‘errno‘ (built-in)>, ‘stat‘: <module ‘stat‘ from ‘E:\\python3.6\\lib\\stat.py‘>, ‘_stat‘: <module ‘_stat‘ (built-in)>, ‘ntpath‘: <module ‘ntpath‘ from ‘E:\\python3.6\\lib\\ntpath.py‘>, ‘genericpath‘: <module ‘genericpath‘ from ‘E:\\python3.6\\lib\\genericpath.py‘>, ‘os.path‘: <module ‘ntpath‘ from ‘E:\\python3.6\\lib\\ntpath.py‘>, ‘_collections_abc‘: <module ‘_collections_abc‘ from ‘E:\\python3.6\\lib\\_collections_abc.py‘>, ‘_sitebuiltins‘: <module ‘_sitebuiltins‘ from ‘E:\\python3.6\\lib\\_sitebuiltins.py‘>, ‘sysconfig‘: <module ‘sysconfig‘ from ‘E:\\python3.6\\lib\\sysconfig.py‘>, ‘lianxi‘: <module ‘lianxi‘ from ‘E:\\pycharm\\pycharm\\PyCharm Community Edition 2017.1.3\\day27\\lianxi.py‘>, ‘time‘: <module ‘time‘ (built-in)>}

  sys.path:查看導入模塊的查找路徑順序

import sys
import lianxi
a=333
def func():
    aa=lianxi.time.time()
    lianxi.time.sleep(1)
    print(444)
    print(lianxi.time.time()-aa)
func()
print(sys.path)





結果:
[‘E:\\pycharm\\pycharm\\PyCharm Community Edition 2017.1.3\\day27‘, ‘E:\\pycharm\\pycharm2017pjb‘, ‘E:\\pycharm‘, ‘E:\\pycharm\\pycharm\\PyCharm Community Edition 2017.1.3‘, ‘E:\\python3.6\\python36.zip‘, ‘E:\\python3.6\\DLLs‘, ‘E:\\python3.6\\lib‘, ‘E:\\python3.6‘, ‘C:\\Users\\方傑\\AppData\\Roaming\\Python\\Python36\\site-packages‘, ‘E:\\python3.6\\lib\\site-packages‘]

  導入的模塊會被放在內存裏,在導入的過程中對模塊進行修改是沒有作用的

  importlib.reload:在導入的過程中對模塊進行修改,會起作用的。

 pyc文件是一個編譯好了的文件,只有在導入模塊的第一次就會產生,以後在導入模塊就不會在產生pyc編譯文件。

  python -m:強行產生一個pyc文件。

 5 name:當作腳本調用的時候結果就是__main__

技術分享

  當name當做導入模塊的時候,就是導入的模塊名

技術分享技術分享

  建議:調用一個函數的功能,結果和中間結果建議放在(if __name__==‘__main__‘:)裏面執行

# def func_3(n):
#     print(n)
# if __name__==‘__main__‘:
#     func_3(10)

 6 dir函數:後面功能一個模塊,將模塊裏的所有功能名字打印出來。

技術分享

  builtins:內置的名字

import builtins
print(dir(builtins))


結果:
[‘ArithmeticError‘, ‘AssertionError‘, ‘AttributeError‘, ‘BaseException‘, ‘BlockingIOError‘, ‘BrokenPipeError‘, ‘BufferError‘, ‘BytesWarning‘, ‘ChildProcessError‘, ‘ConnectionAbortedError‘, ‘ConnectionError‘, ‘ConnectionRefusedError‘, ‘ConnectionResetError‘, ‘DeprecationWarning‘, ‘EOFError‘, ‘Ellipsis‘, ‘EnvironmentError‘, ‘Exception‘, ‘False‘, ‘FileExistsError‘, ‘FileNotFoundError‘, ‘FloatingPointError‘, ‘FutureWarning‘, ‘GeneratorExit‘, ‘IOError‘, ‘ImportError‘, ‘ImportWarning‘, ‘IndentationError‘, ‘IndexError‘, ‘InterruptedError‘, ‘IsADirectoryError‘, ‘KeyError‘, ‘KeyboardInterrupt‘, ‘LookupError‘, ‘MemoryError‘, ‘ModuleNotFoundError‘, ‘NameError‘, ‘None‘, ‘NotADirectoryError‘, ‘NotImplemented‘, ‘NotImplementedError‘, ‘OSError‘, ‘OverflowError‘, ‘PendingDeprecationWarning‘, ‘PermissionError‘, ‘ProcessLookupError‘, ‘RecursionError‘, ‘ReferenceError‘, ‘ResourceWarning‘, ‘RuntimeError‘, ‘RuntimeWarning‘, ‘StopAsyncIteration‘, ‘StopIteration‘, ‘SyntaxError‘, ‘SyntaxWarning‘, ‘SystemError‘, ‘SystemExit‘, ‘TabError‘, ‘TimeoutError‘, ‘True‘, ‘TypeError‘, ‘UnboundLocalError‘, ‘UnicodeDecodeError‘, ‘UnicodeEncodeError‘, ‘UnicodeError‘, ‘UnicodeTranslateError‘, ‘UnicodeWarning‘, ‘UserWarning‘, ‘ValueError‘, ‘Warning‘, ‘WindowsError‘, ‘ZeroDivisionError‘, ‘__build_class__‘, ‘__debug__‘, ‘__doc__‘, ‘__import__‘, ‘__loader__‘, ‘__name__‘, ‘__package__‘, ‘__spec__‘, ‘abs‘, ‘all‘, ‘any‘, ‘ascii‘, ‘bin‘, ‘bool‘, ‘bytearray‘, ‘bytes‘, ‘callable‘, ‘chr‘, ‘classmethod‘, ‘compile‘, ‘complex‘, ‘copyright‘, ‘credits‘, ‘delattr‘, ‘dict‘, ‘dir‘, ‘divmod‘, ‘enumerate‘, ‘eval‘, ‘exec‘, ‘exit‘, ‘filter‘, ‘float‘, ‘format‘, ‘frozenset‘, ‘getattr‘, ‘globals‘, ‘hasattr‘, ‘hash‘, ‘help‘, ‘hex‘, ‘id‘, ‘input‘, ‘int‘, ‘isinstance‘, ‘issubclass‘, ‘iter‘, ‘len‘, ‘license‘, ‘list‘, ‘locals‘, ‘map‘, ‘max‘, ‘memoryview‘, ‘min‘, ‘next‘, ‘object‘, ‘oct‘, ‘open‘, ‘ord‘, ‘pow‘, ‘print‘, ‘property‘, ‘quit‘, ‘range‘, ‘repr‘, ‘reversed‘, ‘round‘, ‘set‘, ‘setattr‘, ‘slice‘, ‘sorted‘, ‘staticmethod‘, ‘str‘, ‘sum‘, ‘super‘, ‘tuple‘, ‘type‘, ‘vars‘, ‘zip‘]

二 包

 1 什麽叫做包:創建的目錄裏面有init.py文件,並且目錄下面有很多的模塊,這就叫做包。

技術分享

  在不同的目錄下導入包的格式: 格式1 絕對路徑:from 路徑.路徑..... import 模塊名

技術分享

from glance.api import policy
policy.get()

              導入的文件路徑應該在from後面,並且用 .點 分開,導入的模塊名跟在import的後面。

                 格式2 相對路徑:from ......目錄名 import 模塊名

技術分享   技術分享

  絕對路勁導入模塊的好處是:在包的內部外部都能被執行

          壞處是:導入的路徑會隨著包與文件之間的關系變化而變化

  相對路徑導入模塊的好處是:一次寫好的模塊之間的導入關系,不需要關心這個包與文件之間的關系了

          壞處是:只能在這個包的內部調用

如果自己寫的模塊與模塊之間沒有什麽聯系,就不需要去考慮相對路徑和絕對路徑了

  如果調用的是一整個包的時候,首先執行的是包下面的Z__init__.py文件。

技術分享  技術分享

  技術分享

重修課程day25(面向對象6之模塊與包)