Python模块和Python包之间有什么区别?

发布于 2021-02-02 23:16:44

Python模块和Python包之间有什么区别?

关注者
0
被浏览
159
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    模块是单个文件(一个或多个文件),可在一个导入下导入并使用。例如

    import my_module
    

    包是目录中提供包层次结构的模块的集合。

    from my_package.timing.danger.internets import function_of_love
    


  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    任何Python文件都是模块,其名称是文件的基础名称,不带.py扩展名。甲包是Python模块的集合:而一个模块是一个Python文件,一个包是含有一个额外的Python模块的目录__init__.py文件中,一个包从恰好包含一堆Python脚本的一个目录区分开。包可以嵌套到任何深度,只要相应的目录包含它们自己的__init__.py文件即可。

    模块和软件包之间的区别似乎仅在文件系统级别上存在。导入模块或包时,Python创建的相应对象始终为type module。但是请注意,当你导入软件包时,仅__init__.py该软件包文件中的变量/函数/类是直接可见的,子软件包或模块则不可见。例如,考虑xmlPython标准库中的包:其xml目录包含一个__init__.py文件和四个子目录;子目录etree包含一个__init__.py文件,以及其他ElementTree.py文件。查看当你尝试以交互方式导入包/模块时会发生什么:

    >>> import xml
    >>> type(xml)
    <type 'module'>
    >>> xml.etree.ElementTree
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'module' object has no attribute 'etree'
    >>> import xml.etree
    >>> type(xml.etree)
    <type 'module'>
    >>> xml.etree.ElementTree
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'module' object has no attribute 'ElementTree'
    >>> import xml.etree.ElementTree
    >>> type(xml.etree.ElementTree)
    <type 'module'>
    >>> xml.etree.ElementTree.parse
    <function parse at 0x00B135B0>
    

    在Python中,还存在一些内置模块(例如)sys,这些模块都是用C语言编写的,但是我认为你并不是要考虑问题中的那些模块。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看