Python-模块学习
模块基本上就是一个包含了所有你定义的函数和变量的文件。为了在其他程序中重用模块,模块的文件名必须以.py为扩展名。
#!/usr/bin/python
# Filename: using_sys.py
import sys
print 'The command line arguments are:'
for i in sys.argv:
print i
print '\n\nThe PYTHONPATH is', sys.path, '\n'
在上面的代码中,利用import语句输入sys模块,这句语句告诉Python,我们想要使用这个模块。sys模块包含了与Python解释器和它的环境有关的函数。
当Python执行import sys语句的时候,它在sys.path变量中所列目录中寻找sys.py模块。如果找到了这个文件,这个模块的主块中的语句将被运行,然后这个模块将能够被使用.执行结果:
xiyoulinux@xiyoulinux-desktop:~/桌面/wjr$ python using_sys.py we are arguments
The command line arguments are:
using_sys.py
we
are
arguments
The PYTHONPATH is ['/home/xiyoulinux/\xe6\xa1\x8c\xe9\x9d\xa2/wjr', '/usr/lib/python25.zip', '/usr/lib/python2.5', '/usr/lib/python2.5/plat-linux2', '/usr/lib/python2.5/lib-tk', '/usr/lib/python2.5/lib-dynload', '/usr/local/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages/Numeric', '/usr/lib/python2.5/site-packages/PIL', '/usr/lib/python2.5/site-packages/gst-0.10', '/var/lib/python-support/python2.5', '/usr/lib/python2.5/site-packages/gtk-2.0', '/var/lib/python-support/python2.5/gtk-2.0']
sys.argv包含了命令行参数的列表,即使用命令行传递给你的程序的参数
创建自己的模块:
每个Python程序也是一个模块。你已经确保它具有.py扩展名了。下面是一个例子,它与普通程序没有什么区别.
#!/usr/bin/python
# Filename: mymodule.py
def sayhi():
print 'Hi, this is mymodule speaking.'
version = '0.1'
# End of mymodule.py
我们接下来将看看如何在我们别的Python程序中使用这个模块。记住这个模块应该被放置在我们输入它的程序的同一个目录中,或者在sys.path所列目录之一。
#!/usr/bin/python
# Filename: mymodule_demo.py
import mymodule
mymodule.sayhi()
print 'Version', mymodule.version
其中用"."后面跟模块成员名的方式用模块的成员.
输出:
xiyoulinux@xiyoulinux-desktop:~/桌面/wjr$ python mymodule_demo2.py
Hi,this is mymodule speaking.
version 0.1
还可以用from...import语法来实现模块使用,代码如下:
#!/usr/bin/python
# Filename: mymodule_demo2.py
from mymodule import sayhi, version
# Alternative:
# from mymodule import *
sayhi()
print 'Version', version
输出结果和上面的结果相同
我们可以用内建函数dir()来列出模块顶一顶的标志符(函数,类,变量)
当你为dir()提供一个模块名的时候,它返回模块定义的名称列表。如果不提供参数,它返回当前模块中定义的名称列表。例如:
>>> import sys
>>> dir(sys)
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__stderr__', '__stdin__', '__stdout__', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'exc_clear', 'exc_info', 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding', 'getrecursionlimit', 'getrefcount', 'hexversion', 'maxint', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'pydebug', 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoptions']
>>> dir()
['__builtins__', '__doc__', '__name__', 'sys']
我们定义一个新的变量a并且给它赋一个值,然后检验dir,我们观察到在列表中增加了以上相同的值。我们使用del语句删除当前模块中的变量/属性,这个变化再一次反映在dir的输出中。
>>> dir()
['__builtins__', '__doc__', '__name__', 'sys']
>>> a=3 #创建变量'a'
>>> dir()
['__builtins__', '__doc__', '__name__', 'a', 'sys']
>>> del a #删除变量'a'
>>> dir()
['__builtins__', '__doc__', '__name__', 'sys']
>>>