zoukankan      html  css  js  c++  java
  • 廖雪峰Python教程--使用模块

    引用来源廖雪峰Python教程:https://www.liaoxuefeng.com/wiki/1016959663602400/1017455068170048

    使用模块

    Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用。

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

     1 #!/usr/bin/env python3
     2 # -*- coding: utf-8 -*-
     3 #第1行和第2行是标准注释,第1行注释可以让这个hello.py文件直接在Unix/Linux/Mac上运行,第2行注释表示.py文件本身使用标准UTF-8编码;
     4 'a test module'
     5 #第4行是一个字符串,表示模块的文档注释,任何模块代码的第一个字符串都被视为模块的文档注释;
     6 __author__ = 'Hale Liao'
     7 #第6行使用__author__变量把作者写进去,这样当你公开源代码后别人就可以瞻仰你的大名;
     8 import sys
     9 #使用sys模块的第一步,就是导入该模块
    10 def test():
    11     args = sys.argv
    12     if len(args) == 1:
    13         print('Hello, world!')
    14         
    15     elif len(args) == 2
    16         print('Hello, %S!' % args[1])
    17     
    18     else:
    19         print('Too many arguments!')
    20 
    21 
    22 if __name__ == '__main__':
    23     test()
    24 
    25     
    26 #sys模块有一个argv变量,用list存储了命令行的所有参数。argv至少有一个元素,因为第一个参数永远是该.py文件的名称,例如:
    27 #运行python3 hello.py获得的sys.argv就是['hello.py'];
    28 #运行python3 hello.py Michael获得的sys.argv就是['hello.py', 'Michael']。

    最后,注意到这两行代码:

    if __name__=='__main__':
        test()

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

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

    $ python3 hello.py
    Hello, world!
    $ python hello.py Michael
    Hello, Michael!

    如果启动Python交互环境,再导入hello模块

    $ python3
    Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 23 2015, 02:52:03) 
    [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import hello
    >>>

    导入时,没有打印Hello, word!因为没有执行test()函数。

    调用hello.test()时,才能打印出Hello, word!

    >>> hello.test()
    Hello, world!

    作用域

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

    正常的函数和变量名是公开的(public),可以被直接引用,比如:abcx123PI等;

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

    类似_xxx__xxx这样的函数或变量就是非公开的(private)不应该被直接引用,比如_abc__abc等;

    之所以我们说,private函数和变量“不应该”被直接引用,而不是“不能”被直接引用,是因为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()函数,而把内部逻辑用private函数隐藏起来了,这样,调用greeting()函数不用关心内部的private函数细节,这也是一种非常有用的代码封装和抽象的方法,即:

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

    作者:Agiroy_70

    本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。

    博主的文章主要是记录一些学习笔记、作业等。文章来源也已表明,由于博主的水平不高,不足和错误之处在所难免,希望大家能够批评指出。

    博主是利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个无耻的文档搬运工!

  • 相关阅读:
    USACO 3.3 A Game
    USACO 3.3 Camelot
    USACO 3.3 Shopping Offers
    USACO 3.3 TEXT Eulerian Tour中的Cows on Parade一点理解
    USACO 3.3 Riding the Fences
    USACO 3.2 Magic Squares
    USACO 3.2 Stringsobits
    USACO 3.2 Factorials
    USACO 3.2 Contact
    USACO 3.1 Humble Numbers
  • 原文地址:https://www.cnblogs.com/hale547/p/13336814.html
Copyright © 2011-2022 走看看