周翔 发表于 2018-8-8 12:04:40

Python 学习笔记 (4)—— 模块

  模块基本上就是一个包含了所有你定义的函数和变量的文件。为了在其他程序中重用模块,模块的文件名必须以.py为扩展名。
  模块可以从其他程序 输入 以便利用它的功能。这也是我们使用Python标准库的方法。首先,我们将学习如何使用标准库模块。
使用sys模块
#!/usr/bin/python  
# Filename: using_sys.py
  
import sys
  
print 'The command line arguments are:'
  
for i in sys.argv:
  print i
  执行结果
$ python using_sys.py we are arguments  
The command line arguments are:
  
using_sys.py
  
we
  
are
  
arguments
  工作原理
  首先,我们利用import语句 输入 sys模块。基本上,这句语句告诉Python,我们想要使用这个模块。sys模块包含了与Python解释器和它的环境有关的函数。
  当Python执行import sys语句的时候,它在sys.path变量中所列目录中寻找sys.py模块。如果找到了这个文件,这个模块的主块中的语句将被运行,然后这个模块将能够被你 使用 。注意,初始化过程仅在我们 第一次 输入模块的时候进行。
  sys模块中的argv变量通过使用点号指明——sys.argv——这种方法的一个优势是这个名称不会与任何在你的程序中使用的argv变量冲突。另外,它也清晰地表明了这个名称是sys模块的一部分。
  这里,当我们执行python using_sys.py we are arguments的时候,我们使用python命令运行using_sys.py模块,后面跟着的内容被作为参数传递给程序。Python为我们把它存储在sys.argv变量中。
  记住,脚本的名称总是sys.argv列表的第一个参数。所以,在这里,'using_sys.py'是sys.argv、'we'是sys.argv、'are'是sys.argv以及'arguments'是sys.argv。注意,Python从0开始计数,而非从1开始。
  sys.path包含输入模块的目录名列表。我们可以观察到sys.path的第一个字符串是空的——这个空的字符串表示当前目录也是sys.path的一部分,这与PYTHONPATH环境变量是相同的。这意味着你可以直接输入位于当前目录的模块。否则,你得把你的模块放在sys.path所列的目录之一。
  模块的__name__
  每个模块都有一个名称,在模块中可以通过语句来找出模块的名称。这在一个场合特别有用——就如前面所提到的,当一个模块被第一次输入的时候,这个模块的主块将被运行。假如我们只想在程序本身被使用的时候运行主块,而在它被别的模块输入的时候不运行主块,我们该怎么做呢?这可以通过模块的__name__属性完成。
  例子2:
#!/usr/bin/python  
# Filename: using_name.py
  
if __name__ == '__main__':
  print 'This program is being run by itself'
  
else:
  print 'I am being imported from another module'
  执行结果
$ python using_name.py  
This program is being run by itself
  
$ python
  
>>> import using_name
  
I am being imported from another module
  
>>>
  每个Python模块都有它的__name__,如果它是'__main__',这说明这个模块被用户单独运行,我们可以进行相应的操作。
  如何创建你自己的模块
  创建你自己的模块是十分简单的,你一直在这样做!每个Python程序也是一个模块。你已经确保它具有.py扩展名了。下面这个例子将会使它更加清晰。
  例子3
#!/usr/bin/python  
# Filename: mymodule.py
  
def sayhi():
  print 'Hi, this is mymodule speaking.'
  
version = '0.1'
  
# End of mymodule.py
上面是一个 模块 的例子。你已经看到,它与我们普通的Python程序相比并没有什么特别之处。我们接下来将看看如何在我们别的Python程序中使用这个模块。记住这个模块应该被放置在我们输入它的程序的同一个目录中,或者在sys.path所列目录之一。#!/usr/bin/python  
# Filename: mymodule_demo.py
  
import mymodule
  
mymodule.sayhi()
  
print 'Version', mymodule.version
  执行结果
$ python mymodule_demo.py  
Hi, this is mymodule speaking.
  
Version 0.1
  它如何工作
  注意我们使用了相同的点号来使用模块的成员。Python很好地重用了相同的记号来,使我们这些Python程序员不需要不断地学习新的方法。
  from..import
  下面是一个使用from..import语法的版本。
#!/usr/bin/python  
# Filename: mymodule_demo2.py
  
from mymodule import sayhi, version

  
#>  
# from mymodule import *
  
sayhi()
  
print 'Version', version
  模块与包
  1.模块可以通过以下3种方式引用
  (1)import
  (2)import ... as ...
  (3)from ... import ...
  例如:
# python say.py  
Hello World
  
# cat say.py
  
#!/usr/bin/python
  
def say():
  print 'Hello World'
  
say()
  
# cat saysomething.py
  
import say
  
# python saysomething.py
  
Hello World
  (1)
# cat saysomething.py  
import say
  
say.say()
  
# python saysomething.py
  
Hello World
  (2)
# cat saysomething.py  
import say as s
  
s.say()
  
# python saysomething.py
  
Hello World
  (3)
# cat saysomething.py  
from say import say
  
say()
  
# python saysomething.py
  
Hello World
  2.包
  包的结构,需要目录里面存在__init__.py 文件即可
# mkdir add  
# vim add/operator.py
  
#!/usr/bin/python
  
def f(x,y):
  return x+y
  
# touch add/__init__.py
  
# vimtest.py
  
#!/usr/bin/python
  
import add.operator
  
print add.operator.f(1,2)
  
# python test.py
  
3
页: [1]
查看完整版本: Python 学习笔记 (4)—— 模块