2019.5.13
今天的内容:模块之含义、使用技巧、包
#######################################################################################
模块:
1)在你所编写的别的程序重用一些函数时,模块就能用上。最简单的一种方法是创建一个包含函数与变量,以 .py 为后缀的文件
另一种方法是使用撰写 Python 解释器本身的本地语言来编写模块。举例来说,你可以使用 C语言来撰写 Python 模块,并且在编译后,你可以通过标准 Python 解释器在你的 Python 代码中使用它们。
python的标准库功能跟模块一样使用。先了解标准库模块使用:
这里看见问题我去找python错误定义,它说我用了非ascii的语句,这时我还没仔细想,查答案有一个解决办法就是在前两行加上:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
本来以为问题解决了,结果还弹出Error: SyntaxError: invalid syntax,意思是关键符号没有加上,这时我恍然大悟,原来是我的冒号用了中文输入法的,才造成这个错误,小插曲用了我大半个小时。。。下面贴正确代码:
解释一下这个模块怎么用:通过 import 语句导入 sys 模块。sys 模块包含了与 Python 解释器及其环境相关的功能,也就是所谓的系统功能(system)。
sys.argv 变量是一系列字符串的列表(List)(列表将在后面的章节予以详细解释)。具体而言, sys.argv 包含了命令行参数(Command Line Arguments)这一列表,也就是使用命令行传递给你的程序的参数。提到命令行也就是说这个程序要在terminal中运行才有效。
sys.argv[]说白了就是一个从程序外部获取参数的桥梁,从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可以看作是一个列表,所以才能用[]提取其中的元素。其第一个元素是程序本身,随后才依次是外部给予的参数。
因此,在这一例子中我们将会有如下对应关系: 'module_using_sys.py' 对应 sys.argv[0](这时固定的) , 'we' 对应sys.argv[1] , 'are' 对应 sys.argv[2] , 'human' 对应 sys.argv[3]
通过运行 import os; print(os.getcwd()) 来查看你的程序目前所处在的目录。
2)按字节码编译(Byte-Compiled)的 .pcy 文件:
将python转换成中间形式的文件。这一 .pyc 文件在你下一次从其它不同的程序导入模块时非常有用——它将更加
快速,因为导入模块时所需要的一部分处理工作已经完成了。同时,这些按字节码编译的文件是独立于运行平台的。注意:这些 .pyc 文件通常会创建在与对应的 .py 文件所处的目录中。如果 Python 没有相应的权限对这一目录进行写入文件的操作,那么 .pyc 文件将不会被创建。
from...import : 如from sys import argv ,以后用argv都不用带sys. 但不建议使用,避免名字冲突和程序阅读困难。
__name__ (我从哪里被执行):当模块第一次被导入时,它所包含的代码将被执行。我们可以通过这一特性来使模块以不同的方式运行,这取决于它是为自己所用还是从其它从的模块中导入而来。这可以通过使用模块的__name__ 属性来实现。
这里还展示了模块是如何被调用的。
如何编写自己的模块:每个 .py程序都可以用作一个模块。但是不能在编译器中展示,只能在命令行中展示
自己写的模块用from...import...就很好用,省去重复的前缀。
dir()函数:
返回由(任何)对象定义的名称列表。如果对象是模块,该列表会包括函数内所定义的函数、类与变量。如果没有提供参数,函数将返回当前模块的名称列表,如果参数是模块名称,将返回指定模块的名称列表。参数也可以是类,如str;也可以是已声明的变量;元组也可以,函数也可以……
通过 del 语句移除了一个变量或是属性,如:del a #删除掉a这个变量。它将如同从未存在过一般。
比vars() 强大,首选dir()
这次测试表明,dir()很强大。返回各种method、方法列表
包(package):包是一种能够方便地分层组织模块的方式
开始要求层次结构了:变量通常位于函数内部,函数与全局变量通常位于模块内部。如果你希望组织起这些模块的话,应该怎么办?这便是包(Packages)应当登场的时刻。
包是指一个包含模块与一个特殊的 __init__.py 文件的文件夹,后者向 Python 表明这一文件夹是特别的,因为其包含了 Python 模块。
你想创建一个名为“world”的包,其中还包含着 “asia”、“africa”等其它子包,同时这些子包都包含了诸如“india”、 “madagascar”等模块。那么: