zoukankan      html  css  js  c++  java
  • Python Module模块

    模块

    https://docs.python.org/zh-cn/3/tutorial/modules.html

    模块的概念被高级语言广泛使用。

    Python的定义

    一个包括Python定义和语句的文件,即XXX.py。

    引入模块。

    import fibo

     之后就可以使用fibo中定义的函数/方法。

    初始化模块

    模块可以包括可执行的语句和函数。当第一次在import中被导入时,执行一次。如果文件被当成脚本运行,它们也会运行,例:

    python3 xxx.py <arguments>

    import语法的变体

    from fibo import fib, fib2
    # from fibo import *

    这样可以直接使用函数名了,前面无需添加模块名字。但是不提倡用*,因为不利于代码的理解和维护,可读性变差了。

    以脚本的方式执行模块

    python fibo.py <arguments>

    以脚本方式调用的话, __name__被赋值为"__main__",意味着在模块末尾自动添加:

    if __name__ == "__main__":
        import sys
        fib(int(sys.argv[1]))

    如果以模块方式导入,上面的代码判断False。

    模块如何被搜索到?

    1. 当一个名为 spam 的模块被导入的时候,解释器首先寻找具有该名称的内置模块。
    2. 没有,则解释器从 sys.path 变量给出的目录列表里寻找名为 spam.py 的文件。

    "Compiled" Python files

    为了快速的加载模块,Python缓存了每个模块被编译后的版本。放在__pycache___目录内,名称的格式:module.version.pyc。

    version为python的版本号。

    标准模块

    Python附带了一个标准模块库。

    sys模块被内部嵌套在解释器中。

    变量ps1, ps2是不同的辅助提升符号,用于交互操作。

    >>> import sys
    >>> sys.ps1
    '>>> '
    >>> sys.ps2
    '... '

    sys.path变量是一个字符串列表, 用于确定解释器的模块搜索路径。

    该变量被初始化为从环境变量 PYTHONPATH 获取的默认路径,或者如果 PYTHONPATH 未设置,则从内置默认路径初始化。

    内置dir()函数

    查找模块中定义的变量名,函数名,模块名等等。返回一个排序了的字符串列表a sorted list of strings.

    ⚠️,内置函数和内置变量名字被放在标准模块builtins内。

    >>> import builtins
    >>> dir(builtins)  
    ['ArithmeticError', ...略

    Packages

    模块文件的集合,用于把相关的模块放到一起。

    __init_.py文件证明sound文件夹是一个Python的package。

    当导入这个package时,Python搜索sys.path中的目录,查找包的子目录

    sound/                          Top-level package
          __init__.py               Initialize the sound package
          formats/                  Subpackage for file format conversions
                  __init__.py
                  wavread.py
                  wavwrite.py
                  aiffread.py
                  aiffwrite.py
                  auread.py
                  auwrite.py
                  ...
          effects/                  Subpackage for sound effects
                  __init__.py
                  echo.py
                  surround.py
                  reverse.py
                  ...

    调用方法:

    #导入单个模块echo:
    import sound.effects.echo  

     这会加载子模块echo,使用它的方法时,必须使用全名:

    sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)

    也可以这样:

    from sound.effects import echo  

    使用时无需包前缀了:

    echo.echofilter(input, output, delay=0.7, atten=4)

    相对导入

    使用leading dots来表示当前包和父包。

    from . import echo
    from .. import formats
    from ..filters import equalizer

    一个自定义模块

    Python模块的标准文件模板:

    • #!/usr/bin/env python3 # -*- coding: utf-8 -*- ' a test module ' __author__ = 'Michael 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()
    • 第1行和第2行是标准注释,第1行注释可以让这个hello.py文件直接在Unix/Linux/Mac上运行,第2行注释表示.py文件本身使用标准UTF-8编码;
    • 第4行是一个字符串,表示模块的文档注释,任何模块代码的第一个字符串都被视为模块的文档注释;
    • 第6行使用__author__变量把作者写进去,这样当你公开源代码后别人就可以瞻仰你的大名;

    导入的sys模块中,有一个argv变量, 用list储存了命令行的所有参数。

    • sys.argv[0], 储存的是在命令行输入的文件名
    • sys.argv[1]及之后的是,命令行输入的参数。

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

    最后2行代码,之前已经讲过,只有在命令行运行模块xx.py时,Python才会把__name__的值设置为"__main__"。

    上面的模块可以在命令行,和交互环境都运行一下,会发现在交互环境不会打印任何字符串。


    作用域

    Python没有提供完全限制访问private函数/变量的方法。

    所以,编程习惯约定,使用_xxx, __xxx,这样的格式代表这是一个private方法/变量。它不应该被直接使用。


    安装第三方模块

    通过包管理工具pip完成。

    如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了。

    如果你正在使用Windows,请参考安装Python一节的内容,确保安装时勾选了pipAdd python.exe to Path

    在命令提示符窗口下尝试运行pip,如果Windows提示未找到命令,可以重新运行安装程序添加pip

    注意:Mac或Linux上有可能并存Python 3.x和Python 2.x,因此对应的pip命令是pip3

    pip install Pillow  #就安装了Pillow模块了。

    安装常用模块

    用pip一个一个安装费时费力,还需要考虑兼容性。我们推荐直接使用Anaconda,这是一个基于Python的数据处理和科学计算平台,它已经内置了许多非常有用的第三方库,我们装上Anaconda,就相当于把数十个第三方模块自动安装好了,非常简单易用。

    以从Anaconda官网下载GUI安装包,安装包有500~600M,所以需要耐心等待下载。网速慢的同学请移步国内镜像。下载后直接安装,Anaconda会把系统Path中的python指向自己自带的Python,并且,Anaconda安装的第三方模块会安装在Anaconda自己的路径下,不影响系统已安装的Python目录。

    模块搜索路径

    默认情况下,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中:

    >>> import sys
    >>> sys.path

    如果我们要添加自己的搜索目录,有两种方法:

    1. 临时修改
      >>> import sys
      >>> sys.path.append('/Users/michael/my_py_scripts')

            2.设置环境变量PYTHONPATH,该环境变量的内容会被自动添加到模块搜索路径中。设置方式与设置Path环境变量类似。注意只需要添加你自己的搜索路径,Python自己本身的搜索路径不受影响。

  • 相关阅读:
    AMQP协议
    设计模式三:行为型模式
    设计模式二:结构型模式
    设计模式一:创建型模式
    算法进阶
    数据结构
    希尔排序、计数排序、桶排序、基数排序
    归并排序
    python Gevent协程
    python——多进程
  • 原文地址:https://www.cnblogs.com/chentianwei/p/11819280.html
Copyright © 2011-2022 走看看