参考:Python 模块


目录:


Python 模块 (Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和 Python 语句。
模块让你能够有逻辑地组织你的 Python 代码段。
把相关的代码分配到一个模块里能让你的代码更好用,更易懂。
模块能定义函数,类和变量,模块里也能包含可执行的代码。

1. import 语句(模块的引入)
 

模块定义好后,我们可以使用 import 语句来引入模块,语法如下:

import module1[, module2[,... moduleN]

比如要引用模块 math,就可以在文件最开始的地方用  import math  来引入。在调用 math 模块中的函数时,必须这样引用:

模块名.函数名

当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。

需要将以下两个文件放置在同一个文件夹内(自动搜索当前目录)

目录结构如下:

...
|--support.py
|--test.py

源代码如下:

support.py

# coding=utf-8

def print_func( par ):
print "Hello : ", par
return

test.py

# coding=utf-8
# 导入模块
import os
import support
# 现在可以调用模块里包含的函数了
support.print_func("Runoob") # 用于暂停显示,否则窗体会一闪而过
os.system("pause")

以上实例输出结果:

Hello : Runoob

2. From…import 语句
 

Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中。语法如下:

from modname import name1[, name2[, ... nameN]]

例如,要导入模块 math 的 log 和 log10 函数,使用如下语句:

>>> from math import log, log10
>>> log(2)
0.6931471805599453

这个声明不会把整个 math 模块导入到当前的命名空间中,它只会将 math 里的 log/log10 单个引入到执行这个声明的模块的全局符号表。


3. From…import * 语句
 

把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:

from modname import *

这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。
例如我们想一次性引入 math 模块中所有的东西,语句如下:

from math import *

4. dir() 函数
 

dir() 函数一个排好序的字符串列表,内容是一个模块里定义过的名字。
返回的列表容纳了在一个模块里定义的所有模块,变量和函数。如下一个简单的实例:

>>> import math
>>> content = dir(math)
>>> print content
['__doc__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil',
'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod',
'frexp', 'fsum', 'gamma', 'hypot', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'modf', 'pi',
'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']

在这里,特殊字符串变量__name__指向模块的名字,__file__指向该模块的导入文件名。


5. Python 中的包
 

包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 Python 的应用环境。
简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以为空。__int__.py用于标识当前文件夹是一个包。
存在两种引用方式,其一为引用所需要的函数,可以直接使用,其二为引用所有的文件,使用时需要 模块名+函数名形式

5.1 在 *.py 文件中引用自定义包

☀☀☀<< 举例 >>☀☀☀
引用全部函数形式:目录结构如下

...
|--test.py
|--package_01
|--__init__.py
|--module_1.py
|--module_2.py

源代码如下:

package_01/module_1.py

# coding=utf-8

def run_11():
print "I'm in run_11" def run_12():
print "I'm in run_12"

package_01/module_2.py

# coding=utf-8

def run_21():
print "I'm in run_21" def run_22():
print "I'm in run_22"

现在,在 package_runoob 目录下创建 __init__.py,__init__.py可以为空,只要它存在,就表明此目录应被作为一个package处理。当然,__init__.py 中也可以设置相应的内容。
本例中 __init__.py 设置为空,然后是 test.py 文件

test.py

# coding=utf-8

# 将包内的函数导入,用的时候可以直接写函数名称
from package_1.module_1 import run_11
from package_1.module_1 import run_12
from package_1.module_2 import run_21
from package_1.module_2 import run_22 run_11()
run_12()
run_21()
run_22()

以上实例输出结果如下:

I'm in run_11
I'm in run_12
I'm in run_21
I'm in run_22

☀☀☀<< 举例 >>☀☀☀
引用全部函数形式:目录结构如下

...
|--test1.py
|--package_01
|--__init__.py
|--module_1.py
|--module_2.py

源代码如下:

module_1.py 与 module_2.py 和上面文件内容一样,主要看 __init__.py 与 test1.py 文件中的内容

__init__.py

# coding=utf-8

# 将其他文件名包含进来
__all__ = ['module_1', 'module_2']

test1.py

# coding=utf-8

# 将包全部导入,用的时候需要通过 模块.函数 的形式
from package_1 import * module_1.run_11()
module_1.run_12()
module_2.run_21()
module_2.run_22()

运行结果与上面一样

说明:如果在 module_2 中调用 module_1 的函数,操作如下:

module_2.py

...
def a():
# 导入包
import package_01
# 直接完整调用 module_1 中的函数
package_01.module_1.fuc()
...

参考:Python中__init__.py文件的作用详解

5.2 在控制台中引用自定义包

具体内容如上所示,调用源码如下:

>>> import sys
>>> # 添加包所在的文件夹
>>> sys.path.append(r"D:\package2")
>>> # 以下内容与 5.1 一致
>>> from package_1 import *
>>> module_1.run_11()
I'm in run_11
>>> module_1.run_12()
I'm in run_12

6. PYTHONPATH 变量
 

作为环境变量,PYTHONPATH 由装在一个列表里的许多目录组成。

当你导入一个模块,Python 解析器对模块位置的搜索顺序是:

1、当前目录
    2、如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
    3、如果都找不到,Python会察看默认路径。模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

通过将变量添加到 PYTHONPATH 变量中,就可以直接引用相应的包,如下将“D:\03-Study\Python\Module”添加到 PYTHONPATH 变量中

计算机 → 属性 → 高级系统设置 → 高级 → 环境变量 → 系统变量 → 新建 → 变量名:PYTHONPATH(大小写都可以  ) → 变量值:D:\03-Study\Python\Module

参考:Setting up PythonPath (Python Path) system variable for Windows (Blender)

查看与使用

>>> import sys
>>> sys.path
['D:\\03-Study\\Python\\Module', ...]
>>> # 可以直接引入自定义包
>>> from arcpy_diy import *
>>> mxd = ap.getCurrentMxd()
>>> df = ap.getDataFrame_0()
>>> lyrs = ap.getLyrs()

包内部的函数

# coding=utf-8

import arcpy

def getLyrs():
# 特别注意,直接拷过来代码会出错
# 原因是拷过来的代码缩进是空格
# 与自动缩进的 tab 键是不同的
# 因此需要特别将空格删除,通过选中可看出区别
"获取当前 mxd 文件的所有图层"
mxd = arcpy.mapping.MapDocument("CURRENT")
lyrs = arcpy.mapping.ListLayers(mxd)
return lyrs def getCurrentMxd():
"获取当前 mxd 文件的 mxd"
mxd = arcpy.mapping.MapDocument("CURRENT")
return mxd def getDataFrame_0():
"获取当前 mxd 文件的第一个数据框架"
mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd)[0]
return df def zoomToLyr( index ):
"将地图缩放到指定的图层"
mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd)[0]
lyrs = arcpy.mapping.ListLayers(mxd)
df.extent = lyrs[index].getExtent() def setEnvWorkspace( path ):
"设置环境变量"
arcpy.env.workspace = path def exportToJpeg( name ):
"将地图文档出图"
mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd)[0]
arcpy.mapping.ExportToJPEG(mxd, arcpy.env.workspace+"\\"+name, resolution=300)

【290】Python 模块的更多相关文章

  1. python模块介绍- multi-mechanize 性能测试工具

    python模块介绍- multi-mechanize 性能测试工具 2013-09-13 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 3739 ...

  2. python模块介绍-locustio:性能测试工具locustio

    转自:http://automationtesting.sinaapp.com/blog/m_locustio_doc python测试文章 http://weibo.com/cizhenshi?is ...

  3. 使用C/C++写Python模块

    最近看开源项目时学习了一下用C/C++写python模块,顺便把学习进行一下总结,废话少说直接开始: 环境:windows.python2.78.VS2010或MingW 1 创建VC工程 (1) 打 ...

  4. Python模块之configpraser

    Python模块之configpraser   一. configpraser简介 用于处理特定格式的文件,其本质还是利用open来操作文件. 配置文件的格式: 使用"[]"内包含 ...

  5. Python模块之"prettytable"

    Python模块之"prettytable" 摘要: Python通过prettytable模块可以将输出内容如表格方式整齐的输出.(对于用Python操作数据库会经常用到) 1. ...

  6. python 学习第五天,python模块

    一,Python的模块导入 1,在写python的模块导入之前,先来讲一些Python中的概念性的问题 (1)模块:用来从逻辑上组织Python代码(变量,函数,类,逻辑:实现一个功能),本质是.py ...

  7. windows下安装python模块

    如何在windows下安装python模块 1. 官网下载安装包,比如(pip : https://pypi.python.org/pypi/pip#downloads) pip-9.0.1.tar. ...

  8. 安装第三方Python模块,增加InfoPi的健壮性

    这3个第三方Python模块是可选的,不安装的话InfoPi也可以运行. 但是如果安装了,会增加InfoPi的健壮性. 目录 1.cchardet    自动检测文本编码 2.lxml    用于解析 ...

  9. Python基础篇【第5篇】: Python模块基础(一)

    模块 简介 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就 ...

随机推荐

  1. LeetCode OJ:Rotate Image(旋转图片)

    You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...

  2. 为什么这个地方用重定向会报错.只能用 服务器跳转?? 为什么我加了过滤器,还是能直接登陆 servlet

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, ...

  3. sphinx使用

    一. 1.先得包含下载的文件 include'./sphinx/api/sphinxapi.php'; $sphinx= new SphinxClient(); $sphinx->SetServ ...

  4. string manipulation in game development-C # in Unity -

    ◇ string manipulation in game development-C # in Unity - It is about the various string ● defined as ...

  5. Python虚拟环境设置

    Python2环境 首先,我们用pip安装virtualenv: pip3 install virtualenv 然后,假定我们要开发一个新的项目,需要一套独立的Python运行环境,可以这么做: 第 ...

  6. PHPExcel导出导入

    便于记忆 这里写一个PHPexcel导出的demo 我们构造一个数据   $letter = array('A','B','D','E'); //sheet索引   $date = array( ar ...

  7. [qt][问题记录] 无法定位程序输入点 _ZdaPvj 于动态链接库 libstdc++-6.dll

    无法定位程序输入点 _ZdaPvj 于动态链接库 libstdc++-6.dll 该问题是没有打包库的问题,之所以出现这个问题的是直接用系统自带的命令行使用qt的windeployqt命令导致提供的库 ...

  8. 【MFC】MFC绘制动态曲线,用双缓冲绘图技术防闪烁

    摘自:http://zhy1987819.blog.163.com/blog/static/841427882011614103454335/ MFC绘制动态曲线,用双缓冲绘图技术防闪烁   2011 ...

  9. html display和visibility在资源加载上的区别

    想要把一个html里的UI组件设置为可见/不可见,可以用两个属性,display=none/block, visibility=hidden/visible, 网上的解释是display虽然可以让一个 ...

  10. hexo配置主题发表文章

    将本地hexo博客部署到github上了,如果想换我们自己喜欢的主题(默认为landscape),同时也要发表发表文章呢,下面给介绍下: 1,进入hexo官网,预览自己想要的主题,https://gi ...