Python中关于使用模块的基础知识


Posted in Python onMay 24, 2015

 一个模块可以在逻辑上组织Python代码。将相关的代码到一个模块中,使代码更容易理解和使用。模块是可以绑定和借鉴任意命名属性的Python对象。

简单地说,一个模块是由Python代码的文件。一个模块可以定义函数,类和变量。模块还可以包括可运行的代码。
例子:

Python代码的模块名为aname通常位于一个名为aname.py。下面是一个简单的模块,support.py作为例子

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

import语句:

可以通过在其他一些Python源文件执行import语句来使用任何Python源文件作为一个模块。import的语法如下:

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

当解释器遇到import语句,它导入(import)模块如果模块出现在搜索路径。搜索路径是一个目录列表,该解释器导入模块之前搜索。例如,导入模块hello.py,需要把下面的命令在脚本的顶部:

#!/usr/bin/python

# Import module support
import support

# Now you can call defined function that module as follows
support.print_func("Zara")

当执行上面的代码,产生以下结果:

Hello : Zara

一个模块被加载一次,不管导入的次数。这可防止模块执行发生多次导入。
 from...import 语句

Python的from语句可以从一个模块中导入特定的属性到当前的命名空间。from...import 语法如下:

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

例如,从模块fib导入函数fibonacci,使用下面的语句:

from fib import fibonacci

此语句不导入整个模块fib到当前的命名空间;它只是介绍了fibonacci从模块fib导入模块的全局符号表列。
from...import * 语句:

它也可以通过使用下面的import语句导入从模块到当前的命名空间的所有名称:

from modname import *

这提供了导入从模块到当前的命名空间中的所有项目一个简单的方法;不过,这个语句应谨慎使用。
定位模块:

当导入一个模块,在下列序列模块由Python解释器搜索:

  •     当前目录
  •     如果未找到该模块,然后Python搜索在shell变量PYTHONPATH每个目录
  •     如果这些方法都失败,Python会检查默认路径。在UNIX上,默认路径是正常是/usr/local/lib/python/

模块搜索路径被存储在系统模块sys作为所述的sys.path变量。在sys.path的变量包含当前目录,PYTHONPATH和相关的默认安装。
PYTHONPATH变量:

在PYTHONPATH是一个环境变量,包括目录列表中。 PYTHONPATH的语法shell变量PATH相同。

下面是Windows系统的典型PYTHONPATH:

set PYTHONPATH=c:\python20\lib;

这里是UNIX系统的典型PYTHONPATH:

set PYTHONPATH=/usr/local/lib/python

命名空间和作用域:

变量名称(标识)映射到对象。名称空间是变量名(键)及其相应的对象(的值)的字典。

Python语句可以在本地命名空间和全局命名空间访问变量。如果局部和全局变量同名,局部变量屏蔽全局变量。

每个函数都有自己的命名空间。类方法遵循相同的作用域规则为普通函数。

Python对变量是否为局部或全局进行假定猜测。它假定任何变量赋值函数中的值是局部的。

因此为了使一个函数内的值赋给一个全局变量,必须先使用global语句。

声明 global VarName 告诉Python VarName是一个全局变量。Python 停止寻找该变量的局部命名空间。

例如,我们在全局命名空间中定义的变量Money 。在该函数的Money ,我们给定Money 的值,因此Python 假定Money 为局部变量。但是,我们设定它,所以一个UnboundLocalError是结果之前访问的局部变量Money 的值。取消global语句解决了这个问题。

#!/usr/bin/python

Money = 2000
def AddMoney():
  # Uncomment the following line to fix the code:
  # global Money
  Money = Money + 1

print Money
AddMoney()
print Money

dir( ) 函数:

使用dir()内置函数返回一个包含一个模块中定义名称的字符串的排序列表。

该列表包含在一个模块中定义的所有模块,变量和函数的名称。下面是一个简单的例子:

#!/usr/bin/python

# Import built-in module math
import math

content = dir(math)

print content;

当执行上面的代码,产生以下结果:

['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 
'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 
'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',
'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 
'sqrt', 'tan', 'tanh']

在这里,特殊字符串变量__name__是模块的名称,__file__是从中加载的模块的文件名。
globals()和 locals()函数:

globals() 和 locals() 函数可用于返回在根据在它们被称为位置的全局和局部名称空间的名称。

如果locals()被一个函数中调用时,它会返回所有可以在局部从函数访问的名称。

如果globals()从一个函数中调用时,它会返回所有可以从全局函数进行访问的名称。

这两个函数的返回类型是字典。因此,名称可以使用keys()函数提取出来。
reload()函数:

当该模块被导入到一个脚本,在一个模块的顶层部分的代码只执行一次。

因此,如果你想重新执行的顶级代码模块中,可以使用reload()函数。reload()函数导入先前导入的模块了。reload()函数的语法是这样的:

reload(module_name)

在这里,module_name是要重装,不包含模块名字符串的模块的名称。例如,要重新加载hello模块,请执行以下操作:

reload(hello)

Python中的包:

包是用于定义由模块和子包和子子包等的单一的Python应用环境的分层文件目录结构。

考虑一个文件Pots.py在Phone目录中可用。此文件的源代码如下一行:

#!/usr/bin/python

def Pots():
  print "I'm Pots Phone"

类似的方法,我们具有不同功能的另两个文件具有相同的名称如上:

  •     Phone/Isdn.py文件有函数 Isdn()
  •     Phone/G3.py 文件有函数 G3()

现在,创建在Phone目录中多了一个文件__init__.py:

  

Phone/__init__.py

 为了让所有的功能可用,当导入Phone,需要把__init__.py明确的import语句如下:

from Pots import Pots
from Isdn import Isdn
from G3 import G3

当添加完这些行到__init__.py,那么已经导入了Phone包所有这些类的使用。

#!/usr/bin/python

# Now import your Phone Package.
import Phone

Phone.Pots()
Phone.Isdn()
Phone.G3()

当执行上面的代码,产生以下结果:

I'm Pots Phone
I'm 3G Phone
I'm ISDN Phone

在上面的例子我们采取示例每个文件单个函数,但可以保留文件中多个函数。还可以在这些文件定义不同的Python类,可以在包外创建那些类。

Python 相关文章推荐
在MAC上搭建python数据分析开发环境
Jan 26 Python
详解Python中heapq模块的用法
Jun 28 Python
Python打包文件夹的方法小结(zip,tar,tar.gz等)
Sep 18 Python
利用python模拟sql语句对员工表格进行增删改查
Jul 05 Python
python实现八大排序算法(1)
Sep 14 Python
使用python读取.text文件特定行的数据方法
Jan 28 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
Aug 27 Python
Python面向对象编程基础实例分析
Jan 17 Python
使用py-spy解决scrapy卡死的问题方法
Sep 29 Python
python中编写函数并调用的知识点总结
Jan 13 Python
如何在Python项目中引入日志
May 31 Python
OpenCV绘制圆端矩形的示例代码
Aug 30 Python
详解Python中的各种函数的使用
May 24 #Python
Python标准库之Sys模块使用详解
May 23 #Python
Python OS模块常用函数说明
May 23 #Python
在Python中操作时间之tzset()方法的使用教程
May 22 #Python
详解Python中time()方法的使用的教程
May 22 #Python
在Python中操作时间之strptime()方法的使用
Dec 30 #Python
详解Python中的strftime()方法的使用
May 22 #Python
You might like
php下统计用户在线时间的一种尝试
2010/08/26 PHP
Laravel学习教程之从入口到输出过程详解
2017/08/27 PHP
项目实践之javascript技巧
2007/12/06 Javascript
jquery禁用右键示例
2014/04/28 Javascript
jquery实现页面百叶窗走马灯式翻滚显示效果的方法
2015/03/12 Javascript
JavaScript DOM元素尺寸和位置
2015/04/13 Javascript
Javascript基础_标记文字的实现方法
2016/06/14 Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
2016/06/29 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
js实现下一页页码效果
2017/03/07 Javascript
Webpack打包慢问题的完美解决方法
2017/03/16 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
underscore之Collections_动力节点Java学院整理
2017/07/10 Javascript
Vue中引入样式文件的方法
2017/08/18 Javascript
JS实现碰撞检测的方法分析
2018/01/19 Javascript
通过一次报错详细谈谈Point事件
2018/05/17 Javascript
React 源码中的依赖注入方法
2018/11/07 Javascript
ES10 特性的完整指南小结
2019/03/04 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
如何在vue中使用HTML 5 拖放API
2021/01/14 Vue.js
python轻松查到删除自己的微信好友
2016/01/10 Python
Python数据类型详解(二)列表
2016/05/08 Python
python中的字符串内部换行方法
2018/07/19 Python
python实现移位加密和解密
2019/03/22 Python
python实现微信自动回复及批量添加好友功能
2019/07/03 Python
Python bytes string相互转换过程解析
2020/03/05 Python
pycharm 关闭search everywhere的解决操作
2021/01/15 Python
css3 实现圆形旋转倒计时
2018/02/24 HTML / CSS
Ruby如何实现动态方法调用
2012/11/18 面试题
《自然之道》教学反思
2014/02/11 职场文书
理工大学毕业生自荐信范文
2014/02/22 职场文书
学校师德承诺书
2014/05/23 职场文书
询价采购方案
2014/06/09 职场文书
住宿生擅自离校检讨书
2014/09/22 职场文书
政协会议宣传标语
2014/10/09 职场文书
一行代码python实现文件共享服务器
2021/04/22 Python