重修课程day25(面向对象6之模块与包)

Posted 方杰0410

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重修课程day25(面向对象6之模块与包)相关的知识,希望对你有一定的参考价值。

一 模块

 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之模块与包)的主要内容,如果未能解决你的问题,请参考以下文章

重修课程day22(面向对象三之继承和派生)

重修课程day24(面向对象5之封装)

重修课程day59(django之http)

重修课程day9(函数之有参函数)

重修课程day32(网络编程六之进程三)

重修课程day12(函数之迭代器和生成器)