类的概念在许多语言中出现,很容易理解。它将数据和操作进行封装,以便将来的复用。

模块

模块,在Python可理解为对应于一个文件。在创建了一个脚本文件后,定义了某些函数和变量。你在其他需要这些功能的文件中,导入这模块,就可重用这些函数和变量。一般用module_name.fun_name,和module_name.var_name进行使用。这样的语义用法使模块看起来很像类或者名字空间,可将module_name 理解为名字限定符。模块名就是文件名去掉.py后缀。

def func():

print "hello world!"

import client

if __name__ == '__main__':

print __name__

client.func()

print client.__name__

>>python main.py ---> result:

__main__

hello world!

client

模块属性__name__,它的值由Python解释器设定。如果脚本文件是作为主程序调用,其值就设为__main__,如果是作为模块被其他文件导入,它的值就是其文件名。

每个模块都有自己的私有符号表,所有定义在模块里面的函数把它当做全局符号表使用。

模块可以导入其他的模块。通常将import语句放在模块的开头,被导入的模块名字放在导入它的模块的符号表中。

from module import names 可以直接从模块中导入名字到符号表,但模块名字不会被导入。

from module import * 可以把模块中的所有名字全部导入,除了那些以下划线开头的名字符号。不建议使用,不清楚导入了什么符号,有可能覆盖自己定义的东西

内建函数dir()可以查看模块定义了什么名字(包括变量名,模块名,函数名等):dir(模块名),没有参数时返回所有当前定义的名字

模块搜索路径

当导入一个模块时,解释器先在当前包中查找模块,若找不到,然后在内置的built-in模块中查找,找不到则按sys.path给定的路径找对应的模块文件(模块名.py)

sys.path的初始值来自于以下地方:

包含脚本当前的路径,当前路径

PYTHONPATH

默认安装路径

sys.path初始化完成之后可以更改

编译过的Python文件: .pyc文件

built-in 模块

上面的例子中,当client被导入后,python解释器就在当前目录下寻找client.py的文件,然后再从环境变量PYTHONPATH寻找,如果这环境变量没有设定,也不要紧,解释器还会在安装预先设定的的一些目录寻找。这就是在导入下面这些标准模块,一切美好事情能发生的原因。

这些搜索目录可在运行时动态改变,比如将module1.py不放在当前目录,而放在一个冷僻的角落里。这里你就需要通过某种途径,如sys.path,来告知Python了。sys.path返回的是模块搜索列表,通过前后的输出对比和代码,应能理悟到如何增加新路径的方法了吧。非常简单,就是使用list的append()或insert()增加新的目录。

import sys

import os

print sys.path

workpath = os.path.dirname(os.path.abspath(sys.argv[0]))

sys.path.insert(0, os.path.join(workpath, 'modules'))

print sys.path

其他的要点

模块能像包含函数定义一样,可包含一些可执行语句。这些可执行语句通常用来进行模块的初始化工作。这些语句只在模块第一次被导入时被执行。这非常重要,有些人以为这些语句会多次导入多次执行,其实不然。

模块在被导入执行时,python解释器为加快程序的启动速度,会在与模块文件同一目录下生成.pyc文件。我们知道python是解释性的脚本语言,而.pyc是经过编译后的字节码,这一工作会自动完成,而无需程序员手动执行。

通常包总是一个目录,可以使用import导入包,或者from + import来导入包中的部分模块。包目录下为首的一个文件便是 __init__.py。然后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了。

在创建许许多多模块后,我们可能希望将某些功能相近的文件组织在同一文件夹下,这里就需要运用包的概念了。包对应于文件夹,使用包的方式跟模块也类似,唯一需要注意的是,当文件夹当作包使用时,文件夹需要包含__init__.py文件,主要是为了避免将文件夹名当作普通的字符串。__init__.py的内容可以为空,一般用来进行包的某些初始化工作或者设置__all__值,__all__是在from package-name import *这语句使用的,全部导出定义过的模块。

可以从包中导入单独的模块。

1). import PackageA.SubPackageA.ModuleA,使用时必须用全路径名

2). 变种: from PackageA.SubPackageA import ModuleA, 可以直接使用模块名而不用加上包前缀。

3). 也可以直接导入模块中的函数或变量:from PackageA.SubPackageA.ModuleA import functionA

import语句语法:

1. 当使用from package import item时,item可以是package的子模块或子包,或是其他的定义在包中的名字(比如一个函数、类或变量)

首先检查item是否定义在包中,不过没找到,就认为item是一个模块并尝试加载它,失败时会抛出一个ImportError异常。

2. 当使用import item.subitem.subsubitem语法时,最后一个item之前的item必须是包,最后一个item可以是一个模块或包,但不能是类、函数和变量

3. from pacakge import *

如果包的__init__.py定义了一个名为__all__的列表变量,它包含的模块名字的列表将作为被导入的模块列表。

如果没有定义__all__, 这条语句不会导入所有的package的子模块,它只保证包package被导入,然后导入定义在包中的所有名字。

python包是:

包是一个有层次的文件目录结构,它定义了由n个模块或n个子包组成的python应用程序执行环境。

通俗一点:包是一个包含__init__.py 文件的目录,该目录下一定得有这个__init__.py文件和其它模块或子包。

常见问题:

引入某一特定路径下的模块

使用sys.path.append(yourmodulepath)

将一个路径加入到python系统路径下,避免每次通过代码指定路径

利用系统环境变量 export PYTHONPATH=$PYTHONPATH:yourmodulepath,

直接将这个路径链接到类似/Library/Python/2.7/site-packages目录下

好的建议

经常使用if __name__ == '__main__',保证你写包既可以import又可以独立运行,用于test。

多次import不会多次执行模块,只会执行一次。可以使用reload来强制运行模块,但不提倡。

包(package)

为了组织好模块,将多个模块分为一个包。包是python模块文件所在的目录,且该目录下必须存在__init__.py文件。常见的包结构如下:

package_a

├── __init__.py

├── module_a1.py

└── module_a2.py

package_b

├── __init__.py

├── module_b1.py

└── module_b2.py

如果main.py想要引用packagea中的模块modulea1,可以使用:

from package_a import module_a1

import package_a.module_a1

如果packagea中的modulea1需要引用packageb,那么默认情况下,python是找不到packageb。我们可以使用sys.path.append('../'),可以在packagea中的__init__.py添加这句话,然后该包下得所有module都添加* import __init_即可。

python模块和类_Python类、模块、包的区别相关推荐

  1. python如何导入模块中的类_python导入模块中类的方法

    自定义标题 python导入模块中类的方法 1.导入模块中的单类 2.一个模块中存储多个类时导入的方法 3.导入模块中所有类的方法 4.导入模块中的类时把类使用as取一个别名 python导入模块中类 ...

  2. python 引入同一路径的类_Python入门 模块导入 import ...\from... import...

    代码越来越多的时候,我们将代码写到一个.py 文件里,随着代码的增加,代码的维护越来越困难.如果将代码按照不同的功能拆分放到不同的.py文件中,每个.py文件就是一个模块. 不同模块中的变量名可以相同 ...

  3. python中类的嵌套_python类的嵌套

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 在.net和java语言中看到过嵌套类的实现,作为外部类一个局部工具还是很有用的 ...

  4. python主函数调用格式_Python的模块与函数

    一.概述Python的程序由包.模块和函数组成. 函数是一段可重用的有名称的代码.通过输入的参数值,返回需要的结果,并可存储在文件中供以后使用.几乎任何Python代码都可放在函数中.Python为函 ...

  5. 用python定义一个员工类_python类的定义和使用

    类的定义: 类是用来描述具有相同的属性和方法的对象的集合.它定义了该集合中的每个对象所共有的属性和方法.对象时类的实例. 二.Python创建类: 使用class语句来创建一个新类,class之后为类 ...

  6. python有哪些模块安全方向_Python 常用模块

    模块 用一坨代码实现了某个功能的代码集合 模块分为三种 · 自定义模块 · 第三方模块 · 内置模块 1)自定义模块 自己编写并存在在某个路径下的python程序,实现了某个功能,可以被其他程序调用 ...

  7. python随机选取字符串_Python random模块sample、randint、shuffle、choice随机函数概念和应用...

    Python标准库中的random函数,可以生成随机浮点数.整数.字符串,甚至帮助你随机选择列表序 列中的一个元素,打乱一组数据等. random中的一些重要函数的用法: 1 ).random() 返 ...

  8. python中模块的概念_Python中模块的概念

    """ 模块搜索顺序 sys.path 查看搜索顺序 """ """ 编程语言中,库.包.模块是同一种概念,是 ...

  9. python autocad 块属性_python之模块的显要属性

    导入和重载提供一个种自然的程序启动的选择,因为导入操作将会在最后一步执行文件. 从一般意义上来说,模块往往就是变量名的封装,被认作是命名空间. 在一个包中的变量名就是所谓的属性:也就是说,属性是绑定在 ...

最新文章

  1. Reference resources
  2. 字母s开头的c语言的工具,C语言库函数(S类字母) - 3
  3. IOS开发之——颜色设置
  4. 机器学习小抄.pdf(像背托福单词一样理解机器学习)
  5. JAVA 泛型中的通配符 T,E,K,V,?
  6. 第八章,作业(网络电视精灵)
  7. 896.Montonic Array - LeetCode
  8. ServiceFabric极简文档-1.2 硬件环境.md
  9. 知识付费的多重属性与本质特征
  10. word2016如何插入目录以及页码
  11. 关于Asterisk的传真以及ForIP的概念
  12. Ubuntu 安装之后无法连接网络问题
  13. 程序员面试智力题总结
  14. 喜报!字根科技牵手荣之联,提供错别字检测解决方案
  15. 如何在shell中实现 backspace
  16. Linux误删文件恢复
  17. 基于PC的机器视觉系统设计
  18. 计算机设备信息检测,硬件信息检测软件(HiBit System Information)
  19. 翻倍增长!C-V2X商业化“提速”,新一代模组加速“助跑”
  20. 考研复试计算机网络篇

热门文章

  1. MySQL【环境搭建 03】腾讯云 Linux 环境踩坑 loading shared libraries: libnuma.so.1 + quit without updating PID file
  2. springboot 并发执行定时任务
  3. Redis哨兵主备切换的数据丢失及Redis数据持久化
  4. 记录一些使用git过程中的bug
  5. Eureka出现No instances available for xxx的五种解决方案(不能解决你骂我)
  6. eclipse中检查项目生成.class文件的地址
  7. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第二章——自编解析与答案
  8. 线性代数 matlab,实用大众线性代数(MATLAB版)
  9. springboot使用shiro配置多个过滤器和session同步案例
  10. Maven-学习笔记01【基础-Maven基本概念】