【290】Python 模块
参考:Python 模块
目录:
- 1. import 语句(模块的引入)
- 2. from...import 语句
- 3. from...import * 语句
- 4. dir() 函数
- 5. Python 中的包
- 5.1 在 *.py 文件中引用自定义包
- 5.2 在控制台中引用自定义包
- 6. PYTHONPATH 变量
Python 模块 (Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和 Python 语句。
模块让你能够有逻辑地组织你的 Python 代码段。
把相关的代码分配到一个模块里能让你的代码更好用,更易懂。
模块能定义函数,类和变量,模块里也能包含可执行的代码。
模块定义好后,我们可以使用 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
Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中。语法如下:
from modname import name1[, name2[, ... nameN]]
例如,要导入模块 math 的 log 和 log10 函数,使用如下语句:
>>> from math import log, log10
>>> log(2)
0.6931471805599453
这个声明不会把整个 math 模块导入到当前的命名空间中,它只会将 math 里的 log/log10 单个引入到执行这个声明的模块的全局符号表。
把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:
from modname import *
这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。
例如我们想一次性引入 math 模块中所有的东西,语句如下:
from math import *
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__指向该模块的导入文件名。
包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的 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()
...
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
作为环境变量,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 模块的更多相关文章
- python模块介绍- multi-mechanize 性能测试工具
python模块介绍- multi-mechanize 性能测试工具 2013-09-13 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 3739 ...
- python模块介绍-locustio:性能测试工具locustio
转自:http://automationtesting.sinaapp.com/blog/m_locustio_doc python测试文章 http://weibo.com/cizhenshi?is ...
- 使用C/C++写Python模块
最近看开源项目时学习了一下用C/C++写python模块,顺便把学习进行一下总结,废话少说直接开始: 环境:windows.python2.78.VS2010或MingW 1 创建VC工程 (1) 打 ...
- Python模块之configpraser
Python模块之configpraser 一. configpraser简介 用于处理特定格式的文件,其本质还是利用open来操作文件. 配置文件的格式: 使用"[]"内包含 ...
- Python模块之"prettytable"
Python模块之"prettytable" 摘要: Python通过prettytable模块可以将输出内容如表格方式整齐的输出.(对于用Python操作数据库会经常用到) 1. ...
- python 学习第五天,python模块
一,Python的模块导入 1,在写python的模块导入之前,先来讲一些Python中的概念性的问题 (1)模块:用来从逻辑上组织Python代码(变量,函数,类,逻辑:实现一个功能),本质是.py ...
- windows下安装python模块
如何在windows下安装python模块 1. 官网下载安装包,比如(pip : https://pypi.python.org/pypi/pip#downloads) pip-9.0.1.tar. ...
- 安装第三方Python模块,增加InfoPi的健壮性
这3个第三方Python模块是可选的,不安装的话InfoPi也可以运行. 但是如果安装了,会增加InfoPi的健壮性. 目录 1.cchardet 自动检测文本编码 2.lxml 用于解析 ...
- Python基础篇【第5篇】: Python模块基础(一)
模块 简介 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就 ...
随机推荐
- AAC解码算法原理详解
”
- 哈工大同义词词林 python 使用范例
哈工大的同义词词林,应该是上个世纪的产物,里面的词比较老旧,但好歹也能用 同义词词林的作用,跟word2vec的获取相近词函数比较类似,这两者发挥的功效比较,看具体的应用吧 1. 首先下载包含同义词的 ...
- 用JQuery写出登录弹出框
类似百度的登录弹出框,可用jquery的fadeIn(),hide(),show(),slideDown()等动画函数实现,一下为html5 代码: <!DOCTYPE html> < ...
- bzoj 4448 情报传递
Written with StackEdit. Description 奈特公司是一个巨大的情报公司,它有着庞大的情报网络.情报网络中共有\(n\)名情报员.每名情报员能有若干名(可能没有)下线,除\ ...
- SqlServer 数据库负载均衡【转】
负载均衡集群是由一组相互独立的计算机系统构成,通过常规网络或专用网络进行连接,由路由器衔接在一起,各节点相互协作.共同负载.均衡压力,对客户端来说,整个群集可以视为一台具有超高性能的独立服务器. 1. ...
- PHP使用curl请求https站点的常见错误及解决方案
使用curl请求http站点和https站点最大的不同就是https站点有证书验证这一环节,如果证书验证不通过则无法发起请求,不管是请求什么类型的站点遇到问题时先把错误码打印出来看一下,打印错误码的代 ...
- 为加载......符号 vs2012调试缓慢解决方案
调试C#网站时vs2012一直 为xxx加载符号 本机上的2010 2017 没有此毛病 没一步都要等待好几秒,百度狗狗(大概花了半天时间)后的方法无果 最后在vs官方论坛 好多老外说删除全部断点就行 ...
- Delphi单元文件之-简体繁体互转
Function GBCht2Chs(GBStr: String): AnsiString; {GBK繁体转简体} Var len:integer; pGBCHTChar: PChar; ...
- java代码List接口和Arraylist类
总结: package clientFrame; import java.util.*; //集合类 List是一个接口.ArrayList是一个类 public class ArraylitTest ...
- HDU 1166 敌兵布阵 树状数组小结(更新)
树状数组(Binary Indexed Tree(BIT), Fenwick Tree) 是一个查询和修改复杂度都为log(n)的数据结构.主要用于查询任意两位之间的所有 元素之和,但是每次只能修改一 ...