ITPub博客

首页 > 应用开发 > Python > Python的包(package)和模块(module)介绍

Python的包(package)和模块(module)介绍

原创 Python 作者:ckxllf 时间:2020-08-05 16:08:14 0 删除 编辑

  Python的包(package)和模块(module)

  一、Python的包(package)

  包:初期理解为文件夹,用于装多个模块

  作用:一种管理Python模块命名空间的形式,采用"点语法" os.path

  包和文件夹之间的区别:Python的包中有一个特殊的文件__init__.py文件,前期里面不写任何内容,但是,就是为了告诉编译器,当前这个目录不是普通目录,是一个包

  创建方式:选中工程,创建Python package(使用pycharm编辑器)

  二、Python的模块(module)

  1.概述

  为了解决维护问题,一般情况下,在一个完整的项目中,会将特定的功能分组,分别放到不同的文件中,在使用的过程中,可以单独维护,各个不同的文件之间互不影响,每个.py文件就被称为一个模块,通过结合包的使用来组织文件

  封装思路: 函数 => 类 => 模块 => 包 => 项目

  优点:

  a.提高了代码的可维护性

  b.提高了代码的复用性【当一个模块被完成之后,可以在多个文件中使用】

  c.引用其他的模块【第三方模块】

  d.避免函数名和变量的命名冲突

  2 os模块

  提供有关于操作系统的函数,处理文件或者文件夹

  **注意:**若path不是绝对路径,则认为是在当前py文件的地址执行相关操作

  # os: operation system 操作系统

  import os

  print(os.name)

  # nt--->windows

  # posix --->Linux, MacOS

  print(os.environ)

  print(os.environ.get('PATH'))

  # . 表示当前目录

  # .. 表示上级目录

  print(os.curdir) # . 当前目录

  # 当前路径

  # 相对路径:从当前目录(或者项目目录)开始的路径

  # 绝对路径:从磁盘根目录开始的完整路径

  print(os.getcwd()) # C:\Users\75171\Desktop\Python2004\day11\code

  # 后面的必须掌握

  # listdir():获取指定路径下的所有文件或者目录的名字,以列表形式展示

  print(os.listdir(r'path'))

  # mkdir():新建目录

  # os.mkdir('hello')

  # os.makedirs('a/b/c') # 可以递归创建目录

  # 删除目录

  # os.rmdir('hello')

  # os.rmdir('a') # OSError: [WinError 145] 目录不是空的。: 'a'

  # 删除文件

  # os.remove('a.txt')

  # 重命名

  # os.rename('a','aaa')

  # os.rename(r'aaa/b/a.txt','aaa/b/bbb.txt')

  # 文件属性

  print(os.stat('aaa/b/bbb.txt'))

  # os.path

  # os.path.join():将多个路径拼接

  print(os.path.join(r'path1','name')) # 一般两个,也可以三个

  # os.path.split():拆分

  print(os.path.split(r'C:\Users\75171\Desktop\Python2004\day11\code\aaa'))

  # 'C:\Users\75171\Desktop\Python2004\day11\code' 'aaa'

  # os.path.splitext():将文件的名称和扩展名拆分

  print(os.path.splitext('ccc.py')) # ('ccc', '.py')

  # os.path.getsize():获取文件大小

  print(os.path.getsize('path')) # 1639

  # os.path.abspath(): 获取指定文件的绝对路径

  print(os.path.abspath('bbb.txt')) # C:\Users\75171\Desktop\Python2004\day11\code\bbb.txt

  # __file__:当前文件名

  print(os.path.abspath(__file__)) # C:\Users\75171\Desktop\Python2004\day11\code\os.py

  file_path = r'C:\Users\75171\Desktop\Python2004\day11\code\os.py'

  dir_path = r'C:\Users\75171\Desktop\Python2004\day11\code'

  # os.path.exist() :判断文件或目录是否存在

  print(os.path.exists(file_path))

  print(os.path.exists(dir_path))

  # os.path.isfile():是否为文件

  print(os.path.isfile(file_path)) # True

  print(os.path.isfile(dir_path)) # False

  # os.path.isdir():是否为文件

  print(os.path.isdir(file_path)) # False

  print(os.path.isdir(dir_path)) # True

  # os.path.dirname():父目录/上一级目录

  print(os.path.dirname(dir_path)) # C:\Users\75171\Desktop\Python2004\day11

  # os.path.basename():文件名

  print(os.path.basename(file_path)) # os.py

  3.自定义模块【掌握】

  3.1自定义import模块

  #1.格式:import 包1.包2.模块的名称

  #注意1:通过点语法区分包的层级关系

  #引入模块

  #注意2:如果要同时导入多个模块,有两种方式

  #方式一

  """

  import os

  import datetime

  import math

  """

  #方式二

  import os,math,datetime

  #注意3:当导入自定义模块的时候,需要注意包的存在

  #注意5:当通过import将模块导入的时候,将模块对应的文件整个加载了一遍

  import ccc.module

  import moduleTextDemo01

  print("***************")

  #注意4:当模块有包的层级关系时,需要调用其中函数的时候,需要指明函数的路径

  ccc.module.test() #os.path.isdir()

  moduleTextDemo01.fun1()

  moduleTextDemo01.fun2()

  moduleTextDemo01.fun3()

  print(moduleTextDemo01.num)

  3.2自定义from-import模块

  #form 模块名 import 函数名1/类名,函数名2.。。。

  #import moduleTextDemo01

  from moduleTextDemo01 import fun1,fun2,fun3

  #注意:采用了form。。。import的方式导入指定的函数之后,可以直接调用函数

  fun1()  郑州去胎记医院

  fun2()

  fun3()

  #好处:进行局部的导入,避免内存空间的浪费

  #注意:当前文件中如果存在和模块中同名的函数的时候,当前文件中的函数仍然会将模块中的函数给覆盖掉

  def fun1():

  print("hello")

  fun1()

  3.3自定义from-import*模块

  #from 。。。。 import * *代表全部

  """

  下面三种导入方式完全等价:将moduleTextDemo01模块中的所有的内容全部导入

  from moduleTextDemo01 import *

  import moduleTextDemo01

  from moduleTextDemo01 import fun1,fun2,fun3

  """

  from moduleTextDemo01 import *

  fun1()

  总结:在python中,每个py文件其实都是一个模块,如果跨模块调用函数,则采用导入的方式

  将不同的功能进行划分,调用函数的时候相对比较方便的

  4.__name__属性和dir函数

  __name__的作用:如果不想让模块中的某些代码执行,可以通过属性仅仅调用程序中的一部分功能

  【写在if判断中的代码只有当前模块被执行的时候才会被执行,检测到是其他的文件在使用当前的模块,则if语句中的代码不会被执行】

  def fun1():

  print("aaa")

  def fun2():

  print("bbb")

  def fun3():

  print("ccc")

  #作用:写在下面判断中的代码,只有当前模块运行的时候才会被执行【起到屏蔽的作用】,其他文件想import此文件,以下函数不会被执行

  if __name__ == "__main__":

  fun1()

  fun2()

  fun3()

  dir:获取指定模块里面的所有的内容

  dir(模块名称) 返回的是一个列表

  print(dir(math))

  print(dir(moduleTextDemo01))


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69945560/viewspace-2709501/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-08-16

  • 博文量
    198
  • 访问量
    174758