py16_Python 库包与模块概念与导入使用

##################################################

目录

活动简介

Python 库包与模块概念及导入使用

Python 模块

函数、类、模块、包、库 通俗的解释

关于 Python 的搜索路径

说一下 sys 中的 sys.path sys.argv

dir() 怎么查看可用方法

Python 包与库概念

包概念总结

库概念总结

Python 中使用 import 或 from-import 导入模块

导入整个模块

只希望导入模块中指定的一部分

还可以根据类名函数名导入

从某个模块中导入多个函数

使用 as 为包名设置一个简称

关于初始化调用模块可执行代码


##################################################

活动简介

活动地址:CSDN21天学习挑战赛

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰;一个人摸索学习很难坚持,想组团高效学习;想写博客但无从下手,急需写作干货注入能量;热爱写作,愿意让自己成为更好的人…

欢迎参与CSDN学习挑战赛,成为更好的自己,请参考活动中各位优质专栏博主的免费高质量专栏资源(这部分优质资源是活动限时免费开放喔~),按照自身的学习领域和学习进度学习并记录自己的学习过程,或者按照自己的理解发布专栏学习作品!

##################################################

Python 库包与模块概念及导入使用

——————————

Python 模块

%%%%%

函数、类、模块、包、库 通俗的解释

        函数是完成特定功能的一段程序 是可复用程序的最小组成单位

        类是包含一组数据及操作这些数据或传递消息的函数的集合

        模块是在函数和类的基础上将一系列相关代码组织到一起的集合体

        在 Python 中一个模块就是一个扩展名为 .py 的源程序文件!


        为了方便调用将一些功能相近的模块组织在一起
        或是将一个较为复杂的模块拆分为多个组成部分
        可以将这些 .py 源程序文件放在同一个文件夹下按照 Python 的规则进行管理
        这样的文件夹和其中的文件就称为包

        以 __init__.py 为文件名表示声明该文件夹是一个 Python 包的源程序目录

        库则是功能相关联的包的集合

%%%%%

关于 Python 的搜索路径

        在导入一个包时 Python 首先在当前包中查找模块
        若找不到则在内置的 built-in 模块中查找

        仍然找不到的话会根据 sys.path 中的目录来寻找这个包中包含的子目录

        目录只有包含 __init__.py 文件时才会被认作是一个包
        最简单的就是建立一个内容为空的文件并命名为 __init__.py
        事实上 __init__.py 还应定义 __all__ 用来支持模糊导入

        可以使用以下语句查看当前系统的 Python 搜索路径:

>>> import sys
>>> sys.path
['', 'D:\\1.Environment\\Python\\Python310\\python310.zip', 'D:\\1.Environment\\
Python\\Python310\\DLLs', 'D:\\1.Environment\\Python\\Python310\\lib', 'D:\\1.En
vironment\\Python\\Python310', 'D:\\1.Environment\\Python\\Python310\\lib\\site-
packages']
>>> 

        我的结果如下:

D:\\1.Environment\\Python\\Python310\\python310.zip
D:\\1.Environment\\Python\\Python310\\DLLs
D:\\1.Environment\\Python\\Python310\\lib
D:\\1.Environment\\Python\\Python310
D:\\1.Environment\\Python\\Python310\\lib\\site-packages

        需要注意的是 Python 安装目录下的 Lib 文件夹内存放了内置的标准库:


D:\1.Environment\Python\Python310\Lib>dir
 驱动器 D 中的卷是 Work
 卷的序列号是 000D-8D77

 D:\1.Environment\Python\Python310\Lib 的目录

2022/08/02  01:52    <DIR>          .
2022/08/02  01:52    <DIR>          ..
2022/06/06  16:22             6,710 abc.py
2022/06/06  16:22            33,552 aifc.py
2022/06/06  16:22               517 antigravity.py
2022/06/06  16:22           100,725 argparse.py
2022/06/06  16:22            61,273 ast.py
2022/06/06  16:22            11,835 asynchat.py
2022/08/02  01:50    <DIR>          asyncio
2022/06/06  16:22            20,917 asyncore.py
2022/06/06  16:22            21,450 base64.py
2022/06/06  16:22            33,114 bdb.py
2022/06/06  16:22            15,286 binhex.py
2022/06/06  16:22             3,245 bisect.py
2022/06/06  16:22            12,191 bz2.py
2022/06/06  16:22            25,334 calendar.py
2022/06/06  16:22            35,103 cgi.py
2022/06/06  16:22            12,417 cgitb.py
2022/06/06  16:22             5,604 chunk.py
2022/06/06  16:22            15,261 cmd.py
2022/06/06  16:22            10,937 code.py
2022/06/06  16:22            37,798 codecs.py
2022/06/06  16:22             5,683 codeop.py
2022/08/02  01:50    <DIR>          collections
2022/06/06  16:22             4,182 colorsys.py
2022/06/06  16:22            20,706 compileall.py
2022/08/02  01:50    <DIR>          concurrent
2022/06/06  16:22            55,978 configparser.py
2022/06/06  16:22            26,627 contextlib.py
2022/06/06  16:22               133 contextvars.py
2022/06/06  16:22             8,982 copy.py
2022/06/06  16:22             7,645 copyreg.py
2022/06/06  16:22             6,525 cProfile.py
2022/06/06  16:22             3,939 crypt.py
2022/06/06  16:22            16,474 csv.py
2022/08/02  01:50    <DIR>          ctypes
2022/08/02  01:50    <DIR>          curses
2022/06/06  16:22            57,841 dataclasses.py
2022/06/06  16:22            90,610 datetime.py
2022/08/02  01:50    <DIR>          dbm
2022/06/06  16:22               331 decimal.py
2022/06/06  16:22            85,364 difflib.py
2022/06/06  16:22            20,560 dis.py
2022/08/02  01:50    <DIR>          distutils
2022/06/06  16:22           107,953 doctest.py
2022/08/02  01:50    <DIR>          email
2022/08/02  01:50    <DIR>          encodings
2022/08/02  01:50    <DIR>          ensurepip
2022/06/06  16:22            40,884 enum.py
2022/06/06  16:22            10,491 filecmp.py
2022/06/06  16:22            16,699 fileinput.py
2022/06/06  16:22             6,912 fnmatch.py
2022/06/06  16:22            28,990 fractions.py
2022/06/06  16:22            36,477 ftplib.py
2022/06/06  16:22            39,068 functools.py
2022/06/06  16:22             5,130 genericpath.py
2022/06/06  16:22             7,704 getopt.py
2022/06/06  16:22             6,175 getpass.py
2022/06/06  16:22            28,054 gettext.py
2022/06/06  16:22             8,125 glob.py
2022/06/06  16:22             9,819 graphlib.py
2022/06/06  16:22            22,458 gzip.py
2022/06/06  16:22            10,498 hashlib.py
2022/06/06  16:22            23,478 heapq.py
2022/06/06  16:22             7,936 hmac.py
2022/08/02  01:50    <DIR>          html
2022/08/02  01:50    <DIR>          http
2022/08/02  01:52    <DIR>          idlelib
2022/06/06  16:22            56,515 imaplib.py
2022/06/06  16:22             3,976 imghdr.py
2022/06/06  16:22            10,937 imp.py
2022/08/02  01:50    <DIR>          importlib
2022/06/06  16:22           127,052 inspect.py
2022/06/06  16:22             4,310 io.py
2022/06/06  16:22            77,010 ipaddress.py
2022/08/02  01:50    <DIR>          json
2022/06/06  16:22             1,124 keyword.py
2022/08/02  01:50    <DIR>          lib2to3
2022/06/06  16:22             5,837 linecache.py
2022/06/06  16:22            79,885 locale.py
2022/08/02  01:50    <DIR>          logging
2022/06/06  16:22            13,633 lzma.py
2022/06/06  16:22            80,945 mailbox.py
2022/06/06  16:22             8,429 mailcap.py
2022/06/06  16:22            23,180 mimetypes.py
2022/06/06  16:22            25,086 modulefinder.py
2022/08/02  01:50    <DIR>          msilib
2022/08/02  01:50    <DIR>          multiprocessing
2022/06/06  16:22             5,890 netrc.py
2022/06/06  16:22            42,113 nntplib.py
2022/06/06  16:22            29,215 ntpath.py
2022/06/06  16:22             2,968 nturl2path.py
2022/06/06  16:22            10,731 numbers.py
2022/06/06  16:22             6,118 opcode.py
2022/06/06  16:22            11,211 operator.py
2022/06/06  16:22            62,050 optparse.py
2022/06/06  16:22            40,636 os.py
2022/06/06  16:22            51,036 pathlib.py
2022/06/06  16:22            64,992 pdb.py
2022/06/06  16:22            66,766 pickle.py
2022/06/06  16:22            96,376 pickletools.py
2022/06/06  16:22             9,161 pipes.py
2022/06/06  16:22            25,291 pkgutil.py
2022/06/06  16:22            43,246 platform.py
2022/06/06  16:22            29,150 plistlib.py
2022/06/06  16:22            15,681 poplib.py
2022/06/06  16:22            16,763 posixpath.py
2022/06/06  16:22            25,114 pprint.py
2022/06/06  16:22            23,481 profile.py
2022/06/06  16:22            30,105 pstats.py
2022/06/06  16:22             5,400 pty.py
2022/06/06  16:22            11,710 pyclbr.py
2022/06/06  16:22           112,431 pydoc.py
2022/08/02  01:50    <DIR>          pydoc_data
2022/06/06  16:22             8,049 py_compile.py
2022/06/06  16:22            11,822 queue.py
2022/06/06  16:22             7,510 quopri.py
2022/06/06  16:22            34,151 random.py
2022/06/06  16:22            16,243 re.py
2022/06/06  16:22             5,428 reprlib.py
2022/06/06  16:22             8,036 rlcompleter.py
2022/06/06  16:22            13,432 runpy.py
2022/06/06  16:22             6,518 sched.py
2022/06/06  16:22             2,108 secrets.py
2022/06/06  16:22            20,155 selectors.py
2022/06/06  16:22             8,803 shelve.py
2022/06/06  16:22            13,851 shlex.py
2022/06/06  16:22            54,226 shutil.py
2022/06/06  16:22             2,530 signal.py
2022/08/02  01:52    <DIR>          site-packages
2022/06/06  16:22            23,261 site.py
2022/06/06  16:22            36,144 smtpd.py
2022/06/06  16:22            46,558 smtplib.py
2022/06/06  16:22             7,356 sndhdr.py
2022/06/06  16:22            37,693 socket.py
2022/06/06  16:22            28,140 socketserver.py
2022/08/02  01:50    <DIR>          sqlite3
2022/06/06  16:22            28,781 sre_compile.py
2022/06/06  16:22             7,438 sre_constants.py
2022/06/06  16:22            41,855 sre_parse.py
2022/06/06  16:22            53,651 ssl.py
2022/06/06  16:22             5,680 stat.py
2022/06/06  16:22            44,332 statistics.py
2022/06/06  16:22            10,846 string.py
2022/06/06  16:22            13,189 stringprep.py
2022/06/06  16:22               272 struct.py
2022/06/06  16:22            85,984 subprocess.py
2022/06/06  16:22            18,684 sunau.py
2022/06/06  16:22            10,520 symtable.py
2022/06/06  16:22            28,412 sysconfig.py
2022/06/06  16:22            11,741 tabnanny.py
2022/06/06  16:22            98,137 tarfile.py
2022/06/06  16:22            23,931 telnetlib.py
2022/06/06  16:22            29,309 tempfile.py
2022/08/02  01:52    <DIR>          test
2022/06/06  16:22            20,266 textwrap.py
2022/06/06  16:22             1,031 this.py
2022/06/06  16:22            58,849 threading.py
2022/06/06  16:22            13,871 timeit.py
2022/08/02  01:52    <DIR>          tkinter
2022/06/06  16:22             2,523 token.py
2022/06/06  16:22            26,605 tokenize.py
2022/06/06  16:22            29,935 trace.py
2022/06/06  16:22            26,910 traceback.py
2022/06/06  16:22            18,607 tracemalloc.py
2022/06/06  16:22               915 tty.py
2022/06/06  16:22           147,901 turtle.py
2022/08/02  01:52    <DIR>          turtledemo
2022/06/06  16:22            10,424 types.py
2022/06/06  16:22            95,164 typing.py
2022/08/02  01:50    <DIR>          unittest
2022/08/02  01:50    <DIR>          urllib
2022/06/06  16:22             7,165 uu.py
2022/06/06  16:22            28,052 uuid.py
2022/08/02  01:50    <DIR>          venv
2022/06/06  16:22            20,237 warnings.py
2022/06/06  16:22            18,517 wave.py
2022/06/06  16:22            22,235 weakref.py
2022/06/06  16:22            24,962 webbrowser.py
2022/08/02  01:50    <DIR>          wsgiref
2022/06/06  16:22             6,154 xdrlib.py
2022/08/02  01:50    <DIR>          xml
2022/08/02  01:50    <DIR>          xmlrpc
2022/06/06  16:22             7,741 zipapp.py
2022/06/06  16:22            91,315 zipfile.py
2022/06/06  16:22            30,913 zipimport.py
2022/08/02  01:50    <DIR>          zoneinfo
2022/06/06  16:22             3,359 _aix_support.py
2022/06/06  16:22             2,772 _bootsubprocess.py
2022/06/06  16:22            33,211 _collections_abc.py
2022/06/06  16:22             9,000 _compat_pickle.py
2022/06/06  16:22             5,843 _compression.py
2022/06/06  16:22            15,049 _markupbase.py
2022/06/06  16:22            22,361 _osx_support.py
2022/06/06  16:22           235,086 _pydecimal.py
2022/06/06  16:22            97,185 _pyio.py
2022/06/06  16:22             6,336 _py_abc.py
2022/06/06  16:22             3,231 _sitebuiltins.py
2022/06/06  16:22            25,856 _strptime.py
2022/06/06  16:22             7,462 _threading_local.py
2022/06/06  16:22             6,129 _weakrefset.py
2022/06/06  16:22             5,302 __future__.py
2022/06/06  16:22                65 __phello__.foo.py
2022/08/02  01:54    <DIR>          __pycache__
             169 个文件      4,740,569 字节
              35 个目录  6,143,684,608 可用字节

D:\1.Environment\Python\Python310\Lib>

        而 Lib/site-packages 目录下 有的 Linux 发行版是 lib/dist-packages
        存放了用户自行安装的第三方 模块/库 :

D:\1.Environment\Python\Python310\Lib\site-packages
D:\1.Environment\Python\Python310\Lib\site-packages
D:\1.Environment\Python\Python310\Lib>cd site-packages

D:\1.Environment\Python\Python310\Lib\site-packages>dir
 驱动器 D 中的卷是 Work
 卷的序列号是 000D-8D77

 D:\1.Environment\Python\Python310\Lib\site-packages 的目录

2022/08/02  01:52    <DIR>          .
2022/08/02  01:52    <DIR>          ..
2022/08/02  01:52               152 distutils-precedence.pth
2022/08/02  01:52    <DIR>          pip
2022/08/02  01:53    <DIR>          pip-22.0.4.dist-info
2022/08/02  01:52    <DIR>          pkg_resources
2022/06/06  16:22               121 README.txt
2022/08/02  01:52    <DIR>          setuptools
2022/08/02  01:52    <DIR>          setuptools-58.1.0.dist-info
2022/08/02  01:52    <DIR>          _distutils_hack
               2 个文件            273 字节
               8 个目录  6,143,684,608 可用字节

D:\1.Environment\Python\Python310\Lib\site-packages>

%%%%%

说一下 sys 中的 sys.path sys.argv

        sys.path 包含了 Python 解释器自动查找所需模块的路径的列表

        sys.path 列表里的路径分为三种:

第一种是当前执行脚本 是主动执行而不是被其她模块调用的脚本的所在路径 是列表中的第一个元素 若没有执行脚本 则是个空字符串

第二种是 Python 内置的标准库路径 PYTHONPATH

其她的是安装的第三方模块路径

        在 Python 启动时 sys.path 根据内建规则和 PYTHONPATH 变量进行初始化
        可以进行 append、insert、pop、remove 等各种列表相关的操作
        但通常都进行 append 操作
        在 PYTHONPATH 环境变量中增加相应的路径
        sys.path.append/自定义模块路径 这种方法是运行时修改 脚本运行后就会失效的

        sys.argv 获取命令行参数 返回值是 List

列表的第一个元素是脚本名称
第二个元素开始才是真正的参数

        示例:

>>> import sys
>>> print ( sys.argv )
['']
>>> 

        如果 test.py 脚本文件内容如下:

import sys
print ( sys.argv )

        执行命令如下:

python3 test.py 521

        则输出如下:

['test.py', '521']

%%%%%

dir() 怎么查看可用方法

        还可以使用 dir() 查看指定模块中的可用方法!

        查看默认输出示例:

C:\Users\byme>python
Python 3.10.5 (tags/v3.10.5:f377153, Jun  6 2022, 16:14:13) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__pack
age__', '__spec__']
>>> 

        查看 print 中可用的方法:

>>> dir ( print )
['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__form
at__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_s
ubclass__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '
__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr
__', '__sizeof__', '__str__', '__subclasshook__', '__text_signature__']
>>> 

——————————

Python 包与库概念

        包就是存放多个模块的文件夹 其实本质上就是一个目录……

        一个大型的项目往往需要使用成百上千的 Python 模块
        如果将这些模块都堆放在一起肯定不好管理

        而且使用模块可以有效避免变量名或函数名重名引发的冲突
        但是如果模块名重复怎么办呢?
        因此才有了 包/Package 的概念

        什么是包呢?
        简单理解 包就是文件夹
        只不过在该文件夹下必须存在一个名为

__init__.py

        的文件

        这对于 Python 2 来说是必须的
        而在 Python 3 中有没有 __init__.py 文件对包来说并不是必须的

        所以每个包的目录下都必须建立一个

__init__.py

        的模块文件 可以是一个空模块 也可以写一些初始化代码 其作用就是告诉 Python 要将该目录当成包来处理

        注意 __init__.py 不同于其她模块文件

        此模块的模块名不是 __init__ 而是她所在的包名!
        例如在 settings 包中的 __init__.py 文件其模块名就是 settings

%%%%%

包概念总结

        Python 包:

        包是一个包含多个模块的文件夹
        她的本质依然是模块
        因此包中也可以包含包

        例如 我们安装了 numpy 模块之后可以在 Lib\site-packages 安装目录下找到名为 numpy 的文件夹
        她就是安装的 numpy 模块 其实就是一个包

%%%%%

库概念总结

        Python 库:

        相比模块和包来说库是一个更大的概念

        例如在 Python 标准库中的每个库都有好多个包 而每个包中都有若干个模块

——————————

Python 中使用 import 或 from-import 导入模块

        import 与 from-import 用法

        在 Python 中使用
import
from-import
    来导入相应模块

%%%%%

导入整个模块

        将整个 somemodule/模块 导入:

import 模块

        示例:

>>> import sys
>>> 

        或者这样将某个模块中的函数全部导入:

from 模块 import *

%%%%%

只希望导入模块中指定的一部分

        从某个模块中导入 somefunction/某个函数 格式如下:

from 模块 import 函数

        示例:

>>> import sys    # 之前导入 sys 过了
>>> dir(sys)    # 查看 sys 模块可用的方法函数
['__breakpointhook__', '__displayhook__', '__doc__', '__excepthook__', '__intera
ctivehook__', '__loader__', '__name__', '__package__', '__spec__', '__stderr__',
 '__stdin__', '__stdout__', '__unraisablehook__', '_base_executable', '_clear_ty
pe_cache', '_current_exceptions', '_current_frames', '_deactivate_opcache', '_de
bugmallocstats', '_enablelegacywindowsfsencoding', '_framework', '_getframe', '_
git', '_home', '_xoptions', 'addaudithook', 'api_version', 'argv', 'audit', 'bas
e_exec_prefix', 'base_prefix', 'breakpointhook', 'builtin_module_names', 'byteor
der', 'call_tracing', 'copyright', 'displayhook', 'dllhandle', 'dont_write_bytec
ode', 'exc_info', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'f
loat_info', 'float_repr_style', 'get_asyncgen_hooks', 'get_coroutine_origin_trac
king_depth', 'getallocatedblocks', 'getdefaultencoding', 'getfilesystemencodeerr
ors', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount',
 'getsizeof', 'getswitchinterval', 'gettrace', 'getwindowsversion', 'hash_info',
 'hexversion', 'implementation', 'int_info', 'intern', 'is_finalizing', 'last_tr
aceback', 'last_type', 'last_value', 'maxsize', 'maxunicode', 'meta_path', 'modu
les', 'orig_argv', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'pla
tlibdir', 'prefix', 'ps1', 'ps2', 'pycache_prefix', 'set_asyncgen_hooks', 'set_c
oroutine_origin_tracking_depth', 'setprofile', 'setrecursionlimit', 'setswitchin
terval', 'settrace', 'stderr', 'stdin', 'stdlib_module_names', 'stdout', 'thread
_info', 'unraisablehook', 'version', 'version_info', 'warnoptions', 'winver']
>>> from sys import __doc__    # 从 sys 模块中单独导入 __doc__ 函数
>>> 

%%%%%

还可以根据类名函数名导入

        语法如下:

from 包或模块名 import 包或类或函数名_1, 包或类或函数名_2 , 包或类或函数名_N

%%%%%

从某个模块中导入多个函数

         还可以导入多个函数 语法如下:

from 模块 import 函数_1, 函数_2, 函数_3, 函数_N

%%%%%

使用 as 为包名设置一个简称

        为什么需要简称 主要是为了容易区分

        语法如下:

import 包名 as 简称

%%%%%

关于初始化调用模块可执行代码

        模块除了方法定义 一般还可以包括用来初始化这个模块可执行的代码

        她们只在第一次被导入时才会被执行

        一个模块被另一个程序第一次引入时 其主程序将运行

        若希望引入模块时其中的某些程序块不执行 可以借助 __name__ 属性使这些程序块仅在该模块自身运行时执行!

        示例:

if __name__ == '__main__':
    print ( "程序自身在运行" )
else:
    print ( "以模块方式运行" )

        测试结果如下:

>>> if __name__ == '__main__':
...     print ( "程序自身在运行" )
... else:
...     print ( "以模块方式运行" )
...
程序自身在运行
>>> 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

燃吹

呜呜呜没钱钱吃饭了……

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值