15036188778

您所在位置: 首页> 学习课程> python培训:python入门—— python模块与包

python培训:python入门—— python模块与包

发布百知教育 来源:学习课程 2019-11-12

1. 模块与包

1.1 模块

  • 每一个以.py结尾的Python文件都是一个模块

  • 模块名同样也是一个标识符,需要符合标识符的命名规则(一般全小写,不使用下划线)

  • 使用模块的功能需要先导入模块,在模块中定义的全局变量、函数、类都可以导入使用

导入模块有两种形式:

  • import moudle(需要使用模块名.的形式使用其功能)

  • from moudle import xxx(不需要使用模块名.的形式使用其功能,可直接使用)

  1. import module     # 导入整个模块,使用相关功能时使用module.的形式

  2. import module as xxx  # 导入模块并赋予别名,使用相关功能时使用别名.的形式


  3. from module import *  # 从模块中导入所有功能,使用时直接用功能名即可(不建议使用)

  4. from module import xxx as yyy        # 从模块中导入某个功能并取别名,使用时使用别名即可

  5. from module import xxx     # 从模块中导入某个功能,使用时直接用功能名称即可

注意:

  1. 模块名一定不要与python的内置模块重名,避免发生冲突!

  2. 如果导入的两个模块存在同名的函数,那么后导入模块的函数会覆盖掉先导入的函数

导入模块时的搜索顺序:


  • 首先在当前目录下搜索该模块,有就直接导入

  • 当前目录没有,搜索系统路径

import sysprint(sys.path)

模块测试接口:

一般情况下,模块的末尾都有下面一行代码:

if __name__ == "__main__":    main()

这行代码就是用来方便用户测试自己写的脚本的功能。这句话通过判断__name__变量的值来判断模块是被导入还是自己执行。

  • 作为脚本执行时,__name__变量值为__main__,可以执行下方测试代码

  • 作为模块被导入时,__name__变量为模块名,下方测试代码不执行

注意:模块被导入时,模块内直接执行的代码会在导入时执行一次(因此建议将模块测试的代码写在if__name__ == "__main__"语句块中)


python培训


模块的推荐写法:

  1. # 导入模块

  2. # 定义全局变量

  3. # 定义类

  4. # 定义函数


  5. # 在代码的最下方

  6. def main():

  7.    # ...

  8.    pass


  9. # 根据 __name__ 判断是否执行下方代码

  10. if __name__ == "__main__":

  11.    main()

1.2 包

python中包是一个包含多个python文件的特殊目录。使用包来组织模块,避免模块名冲突。(包名使用字母、下划线组成)

除此之外,包目录下一般有一个__pycache__目录,该目录会缓存每个模块编译后的文件(.pyc文件,加快执行速度)。执行某个模块时,会检查源文件与编译版文件的修改日期确定是否需要重新编译。

注意:

  1. 包目录下一定有一个__init__.py文件,该文件表示当前目录是一个包

  2. __init__.py文件内部应指定对外部提供的模块列表

# 从 当前目录 导入 模块列表from . import send_messagefrom . import receive_message

1.3 发布模块

  1. 创建setup.py文件:

  1. from distutils.core import setup


  2. setup(name="hm_message",  # 包名

  3.      version="1.0",  # 版本

  4.      description="itheima's 发送和接收消息模块",  # 描述信息

  5.      long_description="完整的发送和接收消息模块",  # 完整描述信息

  6.      author="itheima",  # 作者

  7.      author_email="itheima@itheima.com",  # 作者邮箱

  8.      url="www.itheima.com",  # 主页

  9.      py_modules=["hm_message.send_message",  "hm_message.receive_message"])  # 模块列表

  1. 构建模块

$ python3 setup.py build
  1. 生成发布压缩包

$ python3 setup.py sdist

安装模块:

  1. $ tar -zxvf hm_message-1.0.tar.gz


  2. $ sudo python3 setup.py install

2. 常用内置模块

2.1 os模块

os模块封装了多个与操作系统相关的函数。

  1. os模块:import os

  2.    os.name:操作系统类型

  3.    os.uname():操作系统信息

  4.    os.environ:环境变量(字典形式)

  5.    os.environ.get(key):根据键取某个环境变量的值

  6.    os.listdir(path_str):列出目录下的文件及目录

  7.    os.chdir(path_str):改变当前目录

  8.    os.mkdir(path_str):创建一个目录(单层目录)

  9.    os.rmdir(path_str):删除空目录

  10.    os.makedirs(path_str):递归创建目录(多层目录)

  11.    os.removedirs(path_str):递归删除目录及文件

  12.    os.remove(path_str):删除文件

  13.    os.rename(src, dst):重命名文件或目录

  14.    os.chmod(path, mode):修改文件权限

  15.    os.chown(path, uid, gid):修改文件所有者、所属组

  16.    os.stat(path_str):查看文件详细信息

  17.    os.symlink(src, dst):为文件创建软链接

  18.    os.getcwd():获取当前目录


  19.    os.getpid():获取当前进程ID

  20.    os.getppid():获取父进程ID

  21.    os.kill():杀死进程

os.path: import os.path    os.path.basename(path_str):获取路径的最后一个组成部分    os.path.dirname(path_str):返回路径中的目录结构(仅目录)    os.path.abspath(path_str):返回目录的绝对路径    os.path.join(path_str, path_str):拼接路径    os.path.split(path_str):拆分路径,拆分出最后一个    os.path.splitext(path_str):获取文件扩展名    os.path.exist(path_str):判断文件或目录是否存在    os.path.isfile(path_str):判断是否为文件    os.path.isdir(path_str):判断是否为目录
shutil模块:import shutil    shutil.copy(src, dst):复制文件或目录    shutil.move(src, dst):移动或重命名文件或目录    shutil.copyfile():复制文件

2.2 日期时间模块

time模块


time模块包含多个有关时间处理的函数。

time模块:import time    time.time():返回以秒为单位的浮点数时间(unix时间戳,从1970-01-01 00:00:00 UTC)    time.clock():返回处理器时间(time.process_time())    time.sleep():休眠    time.ctime():将以秒表示的时间(time.time())转换为当地时间的字符串    time.localtime():将秒为单位的时间转换为表示当地时间的时间元组    time.gmtime():将秒为单位的时间转换为UTC时间的时间元组    time.asctime():将时间元组转换为当地时间的字符串

datetime模块包含多个日期时间处理的函数。

datetime模块:from datetime import datetime    datetime.now():返回一个datetime对象,表示当地时间    datetime.utcnow():返回一个datetime对象,表示UTC时间    object_datetime.timestamp():将一个datetime对象转换为unix时间戳    datetime.fromtimestamp():将Unix时间戳转换为datetime对象    datetime.strftime():将datetime对象格式化输出为字符串    datetime.strptime():将时间字符串转换为datetime对象
  1. from datetime import datetime


  2. print(datetime.now())  # 返回一个datetime对象,表示当地时间

  3. print(datetime.utcnow())  # 返回一个datetime对象,表示UTC时间

  4. test_time = datetime.utcnow()

  5. print(test_time.timestamp())  # 将一个datetime对象转换为unix时间戳

  6. print(datetime.fromtimestamp(1525849091.98994))  # 将Unix时间戳转换为datetime对象

  7. print(datetime.strftime(datetime.now(), '%Y-%m-%d %H:%M:%S.%f'))  # 将datetime对象格式化输出为字符串

  8. print(datetime.strptime('2018-05-09 23:04:12.119774', '%Y-%m-%d %H:%M:%S.%f'))  # 将时间字符串转换为datetime对象

  9. # 结果

  10. 2018-05-09 23:14:51.708639

  11. 2018-05-09 15:14:51.708639

  12. 1525850091.708639

  13. 2018-05-09 14:58:11.989940

  14. 2018-05-09 23:14:51.708639

  15. 2018-05-09 23:04:12.119774

2.3 collections模块(容器数据)

collections模块实现了特定目标的容器,以提供Python标准内建容器dict, list, set, 和tuple的替代选择。

namedtuple

命名元组,可用来创建一个自定义的tuple对象。其可规定元素的个数,并可使用属性来访问某个元素。(索引同样适用)

语法:collections.namedtuple(typename, field_names, *, rename=False, defaults=None, module=None)

  1. import collections


  2. Circle = collections.namedtuple('Circle', ['x', 'y', 'z'])

  3. print(isinstance(Circle, tuple))

  4. circle = Circle(5, 6, 7)

  5. print(circle.x, circle.y, circle.z)


  6. # 执行结果

  7. False

  8. 5 6 7

deque

deque是可实现高效插入和删除的双向列表,适合用于队列和栈。deque不仅实现了list的append和pop,还支持appendleft()和popleft().

语法:collections.deque([iterable[, maxlen]])

返回一个新的双向队列对象,从左到右初始化(使用append方法) ,从 iterable数据创建。如果 iterable 没有指定,新队列为空。

  1. import collections


  2. deque_list = collections.deque([1, 2, 3])

  3. print(type(deque_list))

  4. deque_list.appendleft(5)

  5. deque_list.append(6)

  6. print(deque_list)


  7. # 执行结果

  8. # <class 'collections.deque'>

  9. deque([5, 1, 2, 3, 6])

2.4 sys模块

sys模块提供系统相关的参数和函数。

sys.argv

sys.argv用于获取输入的命令行参数。

argv[0] 为脚本的名称(是否是完整的路径名取决于操作系统)。如果没有脚本名被传递给Python解释器, argv[0] 为空字符串。

sys.path

sys.path获取模块的搜索路径。

2.5 urllib模块

urllib提供了一系列操作URL的功能,可用来模拟浏览器执行get post等请求。

  1. from urllib import request


  2. with request.urlopen("http://www.baidu.com") as f:

  3.    data = f.read()

  4.    print("status:", f.status, f.reason)

  5.    for k, v in f.getheaders():

  6.        print("%s: %s" % (k, v))

  7. print('Data:', data.decode('utf-8'))


python培训:http://www.baizhiedu.com/python2019



上一篇:python培训 | python项目实践,用Python绘制心形

下一篇:应届生去公司找个Java程序员的职位需要什么技能?

相关推荐

www.baizhiedu.com

有位老师想和您聊一聊

关闭

立即申请