自学Python之路-Python基础+模块+面向对象
自学Python之路-Python网络编程
自学Python之路-Python并发编程+数据库+前端
自学Python之路-django
html
类的概念在许多语言中出现,很容易理解。它将数据和操做进行封装,以便未来的复用。前端
一般模块为一个文件,直接使用import来导入就行了。能够做为module的文件类型有".py"、".pyo"、".pyc"、".pyd"、".so"、".dll"。python
在建立了一个脚本文件后,定义了某些函数和变量,可重复调用。程序员
任何的python程序均可以做为模块。数据库
2.1 模块导入django
每一个模块都有本身的私有符号表,全部定义在模块里面的函数把它当作全局符号表使用。编程
模块能够导入其余的模块。一般将import语句放在模块的开头,被导入的模块名字放在导入它的模块的符号表中。网络
from module import names #能够直接从模块中导入名字到符号表,但模块名字不会被导入。 from module import * #能够把模块中的全部名字所有导入,除了那些如下划线开头的名字符号(不建议使用)。
import socket, os, regex #用逗号分割模块名称就能够同时导入多个模块 import socket as net, thread as threads #模块导入时可使用 as 关键字来改变模块的引用对象名字 from socket import gethostname #使用from语句能够将模块中的对象直接导入到当前的名字空间. from语句不建立一个到模块名字空间的引用对象,而是把被导入模块的一个或多个对象直接放入当前的名字空间 from socket import gethostname, socket from #from支持逗号分割的对象 from socket import * #载入全部对象到当前名字空间,只能导入__all__列表中存在的对象 from socket import gethostname as hostname #as 和 from 联合使用 只能用于一个模块的最顶层
2.2 查看模块 并发
内建函数dir()能够查看模块定义了什么名字(包括变量名,模块名,函数名等):dir(模块名),没有参数时返回全部当前定义的名字app
2.3 模块搜索路径
#module2.py 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
2.3 其余的要点
模块能像包含函数定义同样,可包含一些可执行语句。这些可执行语句一般用来进行模块的初始化工做。这些语句只在模块第一次被导入时被执行。这很是重要,有些人觉得这些语句会屡次导入屡次执行,其实否则。
模块在被导入执行时,python解释器为加快程序的启动速度,会在与模块文件同一目录下生成.pyc文件。咱们知道python是解释性的脚本语言,而.pyc是通过编译后的字节码,这一工做会自动完成,而无需程序员手动执行。
3.1 一般包老是一个目录,可使用import导入包,或者from + import来导入包中的部分模块(把解决一类问题的模块放在同一个文件夹里,这个文件夹就是“包”)。
包目录下为首的一个文件即是 __init__.py , 而后是一些模块文件和子目录,假如子目录中也有 __init__.py 那么它就是这个包的子包了。(可是在python3里面没有__init__.py也不会出问题,可是在python2.7里面就不能够。)
(__init__.py文件,主要是为了不将文件夹名看成普通的字符串。__init__.py的内容能够为空,通常用来进行包的某些初始化工做或者设置__all__值,__all__是在from package-name import *这语句使用的,所有导出定义过的模块。)
结构以下:
3.2 import语句语法:
遵循原则:凡是在导入时带点的,点的左边必须是一个包。
from package import item
item能够是package的子模块或子包,或是其余的定义在包中的名字(好比一个函数、类或变量)
首先检查item是否认义在包中,不过没找到,就认为item是一个模块并尝试加载它,失败时会抛出一个ImportError异常。
import item.subitem.subsubitem
最后一个item以前的item必须是包,最后一个item能够是一个模块或包,但不能是类、函数和变量
from pacakge import *
若是包的__init__.py定义了一个名为__all__的列表变量,它包含的模块名字的列表将做为被导入的模块列表。
若是没有定义__all__, 这条语句不会导入全部的package的子模块,它只保证包package被导入,而后导入定义在包中的全部名字。
import PackageA.SubPackageA.ModuleA 使用时必须用全路径名
from PackageA.SubPackageA import ModuleA 能够直接使用模块名而不用加上包前缀
from PackageA.SubPackageA.ModuleA import functionA 直接导入模块中的函数或变量
import Graphics.Primitive.fill #导入模块Graphics.Primitive.fill,只能以全名访问模块属性,例如 Graphics.Primitive.fill.floodfill(img,x,y,color). from Graphics.Primitive import fill # 导入模块fill ,只能以 fill.属性名这种方式访问模块属性,例如 fill.floodfill(img,x,y,color). from Graphics.Primitive.fill import floodfill #导入模块fill ,并将函数floodfill放入当前名称空间,直接访问被导入的属性,例如 floodfill(img,x,y,color).
绝对路径:
相对路径
......