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。
模块如何被搜索到?
- 当一个名为
spam
的模块被导入的时候,解释器首先寻找具有该名称的内置模块。 - 没有,则解释器从
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一节的内容,确保安装时勾选了pip
和Add 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
如果我们要添加自己的搜索目录,有两种方法:
- 临时修改
>>> import sys
>>> sys.path.append('/Users/michael/my_py_scripts')
2.设置环境变量PYTHONPATH
,该环境变量的内容会被自动添加到模块搜索路径中。设置方式与设置Path环境变量类似。注意只需要添加你自己的搜索路径,Python自己本身的搜索路径不受影响。
Python Module模块的更多相关文章
- python基础-模块
一.模块介绍 ...
- Python(五)模块
本章内容: 模块介绍 time & datetime random os sys json & picle hashlib XML requests ConfigParser logg ...
- Python安装模块出错(ImportError: No module named setuptools)解决方法
原地址:http://www.cnblogs.com/BeginMan/archive/2013/05/28/3104928.html 在window平台下安装第三方模块时,出现这样的错误:
- Python安装模块出错(No module named setuptools)解决方法
Python第三方模块中一般会自带setup.py文件,在Windows环境下,我们只需要在命令行中使用以下命令即可自动化安装 python setup.py install 安装的过程中有可能会出现 ...
- python常用模块(模块和包的解释,time模块,sys模块,random模块,os模块,json和pickle序列化模块)
1.1模块 什么是模块: 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文 ...
- Python标准模块--logging
1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...
- python Queue模块
先看一个很简单的例子 #coding:utf8 import Queue #queue是队列的意思 q=Queue.Queue(maxsize=10) #创建一个queue对象 for i in ra ...
- Python Paramiko模块与MySQL数据库操作
Paramiko模块批量管理:通过调用ssh协议进行远程机器的批量命令执行. 要使用paramiko模块那就必须先安装这个第三方模块,仅需要在本地上安装相应的软件(python以及PyCrypto), ...
- python基础——模块
python基础——模块 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文 ...
随机推荐
- iscsi-文件类型
iSCSI简介(Internet SCSI): iSCSI 小型计算机系统接口,IBM公司研发,用于在IP网络上运行SCSI协议:解决了 SCSI需要直连存储设备的局限性:可以不停机扩展存储容量,iS ...
- DEVOPS ROADMAP
- DFS,DP————N皇后问题
C++代码 #include <iostream> using namespace std; const int N=20; int n; char g[N][N]; bool col[N ...
- [bzoj1776][Usaco2010 Hol]cowpol 奶牛政坛_倍增lca
[Usaco2010 Hol]cowpol 奶牛政坛 题目大意: 数据范围:如题面. 题解: 第一想法是一个复杂度踩标程的算法..... 就是每种政党建一棵虚树,然后对于每棵虚树都暴力求直径就好了,复 ...
- [转帖]基于docker 搭建Prometheus+Grafana
基于docker 搭建Prometheus+Grafana https://www.cnblogs.com/xiao987334176/p/9930517.html need good study 一 ...
- mysql 常见问题整理
一 coalesce 在mysql中,其实有不少方法和函数是很有用的,这次介绍一个叫coalesce的,拼写十分麻烦,但其实作用是将返回传入的参数中第一个非null的值,比如 SELECT COALE ...
- PAT B1020 月饼(25)
题目描述 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼.现给定所有种类月饼的库存量.总售价.以及市场的最大需求量,请你计算可以获得的最大收益是多少. 注意:销售时允许取出一部 ...
- win10的修改hosts文件
1.找到hosts文件 2.右键hosts文件 -> 属性 -> 安全 -> 编辑 3.依次选中用户组用户组,完全控制打钩,点击应用,点击确定,完成. 一般情况下这样就能修改了 ...
- python 初始化__init__()
init()方法的重要性体现在两点. 1.初始化既是对象生命周期的开始,也是非常重要的一个步骤,每个对象都必须正确的执行了初始化才能够正常的工作 2.__init__()方法的参数可以多种形式来完成赋 ...
- [经验分享] Docker网络解决方案-Weave部署记录
前面说到了Flannel的部署,今天这里说下Docker跨主机容器间网络通信的另一个工具Weave的使用.当容器分布在多个不同的主机上时,这些容器之间的相互通信变得复杂起来.容器在不同主机之间都使用的 ...