Python知识点记录二(包和模块)

包和模块

1、Python项目的组织结构

Python最顶级的层级是包,模块即是包下的各个python文件。从组织的层面考虑,模块应该为各种功能“类”。

2、包和文件夹的不同

*包在形式上就是一个文件夹,但作为包,包内必须含有一个“__init__.py”模块,同时这个“__init__.py”在Python解释器运行时其名字就是包名。

*当一个包被导入,或者该包内的某个模块,或者该包下某个模块内的变量/函数被导入的时候,包内的__init__模块会被解释器自动运行。

*在包内的__init__.py内可以通过定义__all__ = [‘包内模块名‘的字符串列表],设置包内哪些模块可以被外部导入。

3、import、from/import的用法

*对于直接使用import的导入方法,import后面只能跟模块名,不能直接导入模块内的变量或函数等!

*可以通过from/import的方式直接导入模块内的变量或函数等。如包test下的模块x中的变量m可以用以下方式导入使用:

import test.x
print(test.x.m)

from test.x import m
print(m)

from test import x
print(x.m)

*如果要导入包test下模块x中的所有变量、函数;那么可以用:from test import *   。但不推荐这种方法,这会使得导入不够明确。

如果要导入模块x中的部分变量,则可以在模块x中通过设置__all__=[可导入变量/函数名组成的字符串列表]

__all__ = [‘a‘,‘c‘]
a = 2
c = 3
d = 5  #d不在_all_列表中,所以无法导入其他模块中使用

或者直接:from test import a,c

4、模块内置函数

任意模块的内置函数可以通过dir()方法显示。

#模块
a = 1
print(dir())
#打印出上述模块的内置变量
#其中可以发现变量a为自定义的变量,其余为系统自带的变量
[‘__annotations__‘, ‘__builtins__‘, ‘__cached__‘, ‘__doc__‘, ‘__file__‘, ‘__loader__‘, ‘__name__‘, ‘__package__‘, ‘__spec__‘, ‘a‘]

(1)__name__:当前的模块名称。当该模块本身为入口模块时,名称会变成‘__main__‘。

(2)__package__:当前模块所属的包名,当模块为入口模块时,则不存在其上层的顶级包,则返回None。

(3)__doc__:当前模块的文档注释,如果模块没有文档注释,则返回None。

(4)__file__:当前模块的路径信息。

#t.t1.c9
‘‘‘This is T-t1-c9‘‘‘
print(‘t-t1-c9-NAME:‘+__name__)
print(‘t-t1-c9-PACKAGE:‘+(__package__ or ‘当前模块不属于任何包‘))
print(‘t-t1-c9-DOC:‘+(__doc__ or ‘当前模块没有文档注释‘))
print(‘t-t1-c9-FILE:‘+__file__)

#t.c15
import t.t1.c9

print(‘t-c15-NAME:‘+__name__)
print(‘t-c15-PACKAGE:‘+(__package__ or ‘当前模块不属于任何包‘))
print(‘t-c15-DOC:‘+(__doc__ or ‘当前模块没有文档注释‘))
print(‘t-c15-FILE:‘+__file__)

#运行c15的结果:
‘‘‘
This is __init__.py file of PACKAGE t.
t-t1-c9-NAME:t.t1.c9
t-t1-c9-PACKAGE:t.t1
t-t1-c9-DOC:This is T-t1-c9
t-t1-c9-FILE:D:\...\seven\t\t1\c9.py
t-c15-NAME:__main__
t-c15-PACKAGE:当前模块不属于任何包
t-c15-DOC:当前模块没有文档注释
t-c15-FILE:D:\...seven\c15.py

5、__name__变量的经典应用

#Make a script both importable or excutable
#使得一个模块既可以作为普通模块也可以作为可执行程序
if __name__ == ‘__main__‘:
    pass
 
#c17

if __name__ == ‘__main__‘:
    print(‘This is app.‘)

print(‘This is a module.‘)

#c16

import c17

print(‘test‘)

#运行c16的结果:
This is a module.
test

#运行c17的结果:
This is app.
This is a module.

6、相对导入和绝对导入

任意模块其所属的顶级包,都和当前入口程序相关,模块的顶级包最多只上升到入口程序的平级层次。

入口程序不属于任意包。

如果有一个python项目,其包括main.py和package1、package2、package3;其中package2包中又有package4包,package4包内有模块m2.py。

如果以main.py作为入口文件,其中需要导入m2模块,则:

#main.py
#这里的“package2.package4.m2”即为绝对导入
import package2.package4.m2

对于相对导入:一个点‘.‘表示当前目录,两个点‘..‘表示当前目录上一层目录,三个点‘...‘表示当前目录上上层目录,以此类推。

在入口程序中不能使用相对导入,因为相对路径能找到对应模块是在于其会通过所在模块的‘__name__‘来定位;而对于入口文件,其__name__会被改成‘__main__‘,在目录中是找不到‘__main__‘这个文件的。

import导入语法也不能使用相对导入,只能在from/import中使用。

#绝对导入一定是从顶级包开始
import package2.package4.m2

#相对导入
#导入该模块同级目录下m3模块的变量a
from .m3 import a

#导入该模块统计目录下package5包下m3包下的变量a
from .package5.m3 import a

#导入该模块同级目录下package5包下的m3模块
from .package5 import m3

#导入该模块上级目录下m4模块内的p变量
from ..m4 import p

原文地址:https://www.cnblogs.com/tsembrace/p/8735135.html

时间: 2024-08-15 04:38:26

Python知识点记录二(包和模块)的相关文章

python 输入参数解包,模块导入,接收IO输入参数

#coding=utf-8 from sys import argv script,first,second,third = argv print "the script is=",script print "the first is=",first print "the second is=",second print "the third is=",third """ 执行方法 D:\>

python入门系列:包和模块

基本概念 模块:将一组功能相关的代码写入一个单独的.py文件中,需要时进行导入,这个文件就是模块.包:有层次的文件目录结构,内部有多个模块或多个子包,一般要有init.py这个文件(3.3+ 的版本不需要).库:完成一定功能代码的集合,完成的功能一般更加广泛,可以是模块,也可以是包.框架:通过框架,可以快速实现解决某一个问题所需的代码骨架,后期进行填充即可.包和模块的作用 造轮子,工具代码,供其他模块使用(模块化编程)划分了变量作用域,解决变量/函数重名的问题包和模块分类 内建的模块:built

python中记录打印的log模块logging的用法实例

日志基础教程 ? 日志是对软件执行时所发生事件的一种追踪方式.软件开发人员对他们的代码添加日志调用,借此来指示某事件的发生.一个事件通过一些包含变量数据的描述信息来描述(比如:每个事件发生时的数据都是不同的).开发者还会区分事件的重要性,重要性也被称为 等级 或 严重性 什么时候使用日志 ? 对于简单的日志使用来说日志功能提供了一系列便利的函数.它们是 debug(),info(),warning(),error() 和 critical().想要决定何时使用日志,请看下表,其中显示了对于每个通

python学习记录二

一.列表(习惯了OC,总想把它叫成数组): names = ["ZhangYang","GuYun","XiangPeng","CuLiangChen"] names.append("LeiHaiDong")#添加names.insert(1,"ChenRongHua")#插入names[2] = "XieDi"#修改#删除names.remove("Che

Python知识点记录一

一.基本数据类型 1.各进制数字的表示和转换 2进制.8进制.16进制的数据在数字之前需要分别增加0b.0o.0x来表示. >>> 10 #10进制 10 >>> 0b111 #2进制 7 >>> 0o777 #8进制 511 >>> 0xfeda #16进制 65242 各个进制的转换,2进制.8进制.10进制.16进制的转换方法分别为bin().oct().int().hex(). >>> bin(16) #10

Python学习(二)导入模块(2)

原文地址:https://www.cnblogs.com/rookieagle/p/10236365.html

Python进阶(十一)----包,logging模块

Python进阶(十一)----包,logging模块 一丶包的使用 什么是包: ? 包是通过使用 .模块名的方式组织python模块名称空间的方式. 通俗来说,含有一个__init__.py文件的文件夹就是包. 包的作用: ? 将文件夹/模块组织起来,来提高程序的结构性和可维护性. ? 目的不是运行,为了导入使用.包只是一种形式,包的本质就是一个模块 import: # 创建一个包,也会发生三件事: ''' 1. 将该aaa包内 __init__py文件加载到内存. 2. 创建一个以aaa命名

Python基础之包与模块

本文和大家分享的主要是python中包与模块相关内容,一起来看看吧,希望对大家学习python有所帮助. 摘要 1. 为重用以及更好的维护代码, Python 使用了模块与包:一个 Python 文件就是一个模块,包是组织模块的特殊目录(包含 __init__.py 文件). 2. 模块搜索路径, Python 解释器在特定的目录中搜索模块,运行时 sys.path 即搜索路径. 3. 使用 import 关键字导入模块,注意 import * 与 __all__ 的关系. 1. 模块与导入 A

进击的Python【第五章】:Python的高级应用(二)常用模块

Python的高级应用(二)常用模块学习 本章学习要点: Python模块的定义 time &datetime模块 random模块 os模块 sys模块 shutil模块 ConfigParser模块 shelve模块 xml处理 re正则表达式 一.Python模块的定义 有过C语言编程经验的朋友都知道在C语言中如果要引用sqrt这个函数,必须用语句"#include<math.h>"引入math.h这个头文件,否则是无法正常进行调用的.那么在Python中,如