模块

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自己本身的搜索路径不受影响。

Python Module模块的更多相关文章

  1. python基础-模块

    一.模块介绍                                                                                              ...

  2. Python(五)模块

    本章内容: 模块介绍 time & datetime random os sys json & picle hashlib XML requests ConfigParser logg ...

  3. Python安装模块出错(ImportError: No module named setuptools)解决方法

    原地址:http://www.cnblogs.com/BeginMan/archive/2013/05/28/3104928.html 在window平台下安装第三方模块时,出现这样的错误:

  4. Python安装模块出错(No module named setuptools)解决方法

    Python第三方模块中一般会自带setup.py文件,在Windows环境下,我们只需要在命令行中使用以下命令即可自动化安装 python setup.py install 安装的过程中有可能会出现 ...

  5. python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)

    1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文 ...

  6. Python标准模块--logging

    1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...

  7. python Queue模块

    先看一个很简单的例子 #coding:utf8 import Queue #queue是队列的意思 q=Queue.Queue(maxsize=10) #创建一个queue对象 for i in ra ...

  8. Python Paramiko模块与MySQL数据库操作

    Paramiko模块批量管理:通过调用ssh协议进行远程机器的批量命令执行. 要使用paramiko模块那就必须先安装这个第三方模块,仅需要在本地上安装相应的软件(python以及PyCrypto), ...

  9. python基础——模块

    python基础——模块 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文 ...

随机推荐

  1. python 滚动字幕

    写在前面:最近学python,爬虫方面感兴趣,顺便还可以了解下人工智能吧. 下面是两种方式做滚动字幕,直接贴代码了: 1.第一种: import time advText = input(" ...

  2. git 命令 查看历史提交 git log

    怎么理解git commit 命令 git commit 相当于 我们虚拟机快照操作,每次执行commit命令 相当于对本地仓库做一次快照,保存了当时仓库的状态, git commit -m 加上的& ...

  3. 记录一次maven打包时将test目录下的类打包到jar中,Maven Assembly Plugin的使用

    今天有人问我打包后找不到主类,运行的类写在test中.按照常规,test目录下的文件不会打包到jar包中.(但是我测试一个springboot工程就可以,这里之后再研究) 具体解决如下 第一步:在po ...

  4. gcc5+opencv4.0.1 "玄学"bug记录

    近期需要使用OpenCV中的gpu加速的一些函数,需要重新编译OpenCV库文件. 由于本机安装的cuda9.0对编译器gcc的版本有要求,平时常用的gcc7.0用不了,所以选用了gcc5.5 . O ...

  5. Django+celery+rabbitmq实现邮件发送

    一.环境 1.pip包 amqp==2.4.2 anyjson==0.3.3 billiard==3.6.0.0 celery==4.3.0 Django==2.2 dnspython==1.16.0 ...

  6. Neo4j Cypher语法(一)

    目录 Cypher手册详解 1 背景 2 唯一性 3 语法 3.1 命名规则 3.2 表达式 3.3 变量与保留关键字 3.4 参数 3.5 操作符 3.6 模式 3.7 列表 Cypher手册详解 ...

  7. 深入理解计算机系统 第十二章 并发编程 part1 第二遍

    三种构造并发程序的方法及其优缺点 1.进程 用这种方法,每个逻辑控制流都是一个进程,由内核来调度和维护.因为进程有独立的虚拟地址空间,想要和其他流通信,控制流必须使用某种显式的进程间通信机制. 优点: ...

  8. 怎样理解DOM

    一句话总结: DOM 是一个 js 对象. 他可以赋予 js 控制 html 文档的能力.  全称: Document Object Model. DOM 的最小组成单位是: 节点 , 节点有7种类型 ...

  9. Winform自定义键盘控件开发及使用

    最近有学员提出项目中要使用键盘控件,系统自带的osk.exe不好用,于是就有了下面的内容: 首先是进行自定义键盘控件的开发,其实核心大家都知道,就是利用SendKeys.Send发送相应 的字符,但是 ...

  10. [转载]深入理解maven构建生命周期和各种plugin插件

    我就不复制博主文章了,到原文地址看吧.写这个只是为了自己搜索起来方便些: https://blog.csdn.net/zhaojianting/article/details/80321488 htt ...