Python3-模块、包的使用

Python3-模块、包的使用

1. 模块介绍

模块是一个包含所有事先定义好的函数和变量的文件,其后缀名是.py。
模块可以被别的程序引入,以使用该模块中的函数等功能。
通俗一点说:模块就是py脚本,里面有定义好的函数和变量,可以在其他py程序中调用模块中的函数和变量。
在这里插入图片描述

import sys
print(sys.argv)   # py程序路径列表
print(sys.path)   # python可执行程序路径列表

关于具体如何导入模块或导入模块中的函数、变量的方法,之前的博客有介绍,这里就不重复讲述了。

2. __name__属性

# filename:test
if __name__ == '__main__':
   print('程序自身在运行')
else:
   print('我来自另一模块')

在这里插入图片描述
每个模块都有一个__name__属性,当其值是'__main__'时,表明该模块自身在运行,否则是被引入。
可以使用该属性判断这个模块运行在test.py还是在其他程序。

3. dir()函数

函数 dir() 可以找到模块内定义的所有函数或变量的名称。以一个字符串列表的形式返回。
作用在于:如果不知道这个模块有哪些函数或变量,可以通过dir()函数查看下。

import test, sys, math
print(dir(test))
print(dir(sys))
print(dir(math))
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
['__breakpointhook__', '__displayhook__', '__doc__', '__excepthook__', '__interactivehook__', '__loader__', '__name__', '__package__', '__spec__', '__stderr__', '__stdin__', '__stdout__', '__unraisablehook__', '_base_executable', '_clear_type_cache', '_current_frames', '_debugmallocstats', '_enablelegacywindowsfsencoding', '_framework', '_getframe', '_git', '_home', '_xoptions', 'addaudithook', 'api_version', 'argv', 'audit', 'base_exec_prefix', 'base_prefix', 'breakpointhook', 'builtin_module_names', 'byteorder', 'call_tracing', 'copyright', 'displayhook', 'dllhandle', 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'float_repr_style', 'get_asyncgen_hooks', 'get_coroutine_origin_tracking_depth', 'getallocatedblocks', 'getdefaultencoding', 'getfilesystemencodeerrors', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval', 'gettrace', 'getwindowsversion', 'hash_info', 'hexversion', 'implementation', 'int_info', 'intern', 'is_finalizing', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'platlibdir', 'prefix', 'pycache_prefix', 'set_asyncgen_hooks', 'set_coroutine_origin_tracking_depth', 'setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout', 'thread_info', 'unraisablehook', 'version', 'version_info', 'warnoptions', 'winver']
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc', 'ulp']

4. 标准模块

Python 本身带着一些标准的模块库。如sys、math模块。

5. 包

包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。
每个模块都是一个.py文件,如a.py
包可以看作是包含__init__.py模块的文件夹。
从关系上看如下图:
p1是一个包,包含必需的__init__.py模块,还包含p10p11两个子包和t1模块。

在这里插入图片描述
p10这个子包,包含必需的__init__.py模块和t1000模块。
在这里插入图片描述
p100这个子包,包含必需的__init__.py模块,就没有其他模块。
在这里插入图片描述

  • 导入包里面的某个模块:如导入t1000模块,import p1.p10.p100.t1000,在调用t1000模块内的函数或变量时要带上模块名。【 import 后必须是子包或模块】
  • 导入包里面的某个模块from p1.p10.p100 import t1000,在调用t1000模块内的函数或变量时要带上模块名。【 import 后必须是子包或模块】
  • 导入模块内的某个函数fun_namefrom p1.p10.p100.t1000 import fun_name,这时可以直接使用该函数。
  • from package import *:在使用这种形式导入模块时,会将一个包下面所有的子模块都导入。不建议使用此种方式。
    导入语句遵循如下规则:如果包定义文件 __init__.py 存在一个叫做__all__的列表变量,那么在使用 from package import * 的时候就把这个列表中的所有名字作为包内容导入。

6. 常用python标准库(模块)概述

接口名 导入模块
操作系统接口 import os
管理文件和目录 import shutil
文件通配符 import glob
命令行参数 import sys
字符串正则匹配 import re
数学符号 import math
随机数工具 import random
访问互联网 urllib.request
发送邮件 import smtplib
日期和时间 from datetime import date
数据压缩 import zlib gzip bz2 zipfile tarfile
性能度量 from timeit import Timer
测试模块 import doctest unittest

可以在安装目录下的Lib目录下查看各个模块的源文件。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_36522099/article/details/110181110