Python 3.1 使用模块

使用模块

Python中内置了很多模块,只要安装了模块就可以拿来使用。

我们以内建的sys模块,编写一个hello模块:

#!/usr/bin/env python

# -*- coding : utf-8 -*-

'a test module'

_author_ ='liao'


import sys

def test():

    args =sys.argv

    if len(args) ==1:

        print('Hello,world!')

    elif len(args) ==2:

        print('Hello,%s' % args[1])

   else:

        print('Too many arguments!')

if __name__ == '__main__':
    test()

解读下代码:
import sys导入sys模块,利用sys这个变量就可以访问sys模块的所有功能。

sys有一个argv功能,用list存储了命令行的所有参数。argv至少有一个参数,因为第一个参数永远是该.py文件的名称。例如:

运行python hello.py,获得的sys.argv就是 ['hello.py']

运行pyhton hello.py Michael,获得的sys.argv就是['hello.py','Michael']。

注意最后两行:

if __name__ =='__main__':
    test()

当我们在命令行运行hello模块时,Python解释器会把一个特殊的变量__name__置为__main__,而如果在其他地方导入该模块,if判断将失效,因此,这种if测试可以让一个模块通过命令行运行时多执行一些额外的代码,最常见的就是运行测试。

我们可以用命令行看下运行效果:
$python hello.py

Hello,world!

$python hello.py 'Michael'

Hello,Michael

如果启动python的交互环境:
>>>import hello

>>>hello.test()

Hello,world!


作用域

在一个模块中,我们可能定义很多函数和变量,但有的函数和变量希望给别人用,有的我们仅仅想在函数内部使用,在Python中,是通过_前缀实现的。

正常的函数和变量名是公开的(public),可以被直接引用,比如,abc.123,PI等

类似__xx__这样的变量是特殊的,可以被直接引用,但是有别的用途,如上面的__author__,__name__就是特殊变量,hello模块定义的文档注释也可以用特殊变量__doc__访问,我们自己的变量一般不要使用这种变量名;

类似,_x和__xxx这样的变量就是非公开的(private),不应该被直接引用,比如_abc,__abc等。

之所以说“不应该”而没有说“不能”,因为Python并没有一种方法可以完全限制访问private函数或者变量,但是从编程习惯上不应该访问private函数或者变量。

private函数或者变量不应该被别人引用,那它们有什么作用呢?

def _private_1(name):
    return 'Hello,%s' % name

def _private_2(name):

    return 'Hi,%s' % name

def greeting(name):

    if len(name) >3:

        return _private_1(name)

    else:
        return _private_2(name)

我们在模块中公开greeting函数,而把内部的逻辑隐藏起来,这样,调用greeting()函数不用关心内部的private函数细节,这也是一种非常有用的代码封装和抽象的方法:

外部不需要引用的全部函数定义为private,只有外部需要引用的函数才定义为public。




     

你可能感兴趣的:(python,使用模块)