【python】python模块(这才是重中之重)

来源:互联网 发布:新倩女幽魂在mac上玩 编辑:程序博客网 时间:2024/05/29 16:33

1、创建模块有很多方法,最简单的就是创建以.py结尾的文件,在文件中包含函数和变量。另外一种方法是使用自然语言,就是以python编译器本身的方式写。

模块可以从另外一个程序导入,来使用其函数的功能。这也是我们使用标准库的方式。

-------

#C:/Python33/HwhCode#Filename: module.pyimport syssys.argv =[sys.argv[0],'we','are','arguments']print('The command line arguments are:')for i in sys.argv:    print(i)print('\n\nThe PYTHONPATH is',sys.path,'\n')
--------


(1)首先import了sys模块,这句话告诉python,我们想要使用这个模块。sys模块包含了python解释器和它的环境有关的参数。

(2)当python执行import sys时,它会寻找sys模块。它是内置模块,因此python知道他在哪里。

(3)如果他是一个用python编写的模块,未编译,Python编译器会查找列在sys.path中的路径,如果模块找到了,就会运行这个模块主题中的语句,模块就是可以利用的了。初始化过程仅在我们第一次导入模块的时候进行。

(4)在sys模块中,argv变量可以使用sys.argv来引用,他很清楚的表明argv是sys的一部分。这个方法的优势是这个名称不会与任何你在程序中使用的argv变量冲突。

sys.argv是一个字符串的列表,sys.argv包含了命令行参数的列表。即,使用命令行传递程序的参数。

(5)脚本名称总是sys.argv列表的第一个参数,python从0开始计数。

(6)sys.path包含了输入模块的目录名列表,我们可以观察到sys.path第一个字符串是当前目录,有时候显示空的,都表示当前目录是sys.path的一部分。这与PYTHONPATH环境变量是相同的。这意味着你可以直接输入当前目录的模块,否则,你得把你的列表放在sys.path列表的目录之一。

(7)当前目录是程序启动的目录。运行import os; print(os.getcwd())获取当前目录。

2、按字节编译的.pyc文件

导入一个模块,相对来说是一个相当费时间的事情。python导入了一些技巧,减少花费的时间。

一种方法是创建按字节编译的文件。这些文件以.pyc作为扩展名。字节编译的文件与python变换程序的中间状态有关。当你下次从别的程序输入这个模块时,。pyc文件是十分有用的,因为一部分输入模块的处理已经完成了。另外,这些字节编译的文件也是与平台无关的。

.pyc文件通常是用与.py文件相同的方式,在相同的路径创建。如果python没有写入当前路径的权限,.pyc文件就不会被创建了。

3、from...import...语句

如果你想要直接输入argv变量到你的程序中,而不需要每次都打sys.,那么可以使用from sys import argv语句,如果你想要输入所有sys模块使用的名字,可以使用from sys import *语句。这对于所有模块都适用。

但是,一般来说,要尽量避免使用from...import...语句,而使用import,这样可以是程序更加易读,避免名称冲突。

4、模块的__name__

每个模块都有一个名字,在模块中可以通过语句来找出模块的名字。

在以下场合特别有用:

当一个模块被第一次输入时,这个模块的主块将被运行。假如我们只想在程序本身被使用的时候运行主块。而在它被别的模块输入的时候不运行主块。就可以通过模块的__name__属性来完成。

-------------

#C:/Python33/HwhCode#Filename: module.py
#####using_name#######if __name__ == '__main__':    print('This program is being run by itself')elif __name__ == 'module':    print('I am being imported from another module')
else:
    print('wrong')

--------------

z直接运行,会输出第一句。

在输出窗口输入import module。运行,会输出第二句。

说明:每个python都有自己的__name__,如果它是__main__,说明这个模块被用户单独运行。

理解:注意,每个.py文件都有自己的__name__,并且都有__main__和文件名(如module)。在这个.py文件自己调用自己的时候,__name__就等于__main__,在这个.py文件被别人import的时候,__name__就等于文件名。由此,可以区分两种调用分别执行不同的语句。

5、创建自己的模块。

每个.py文件就是一个模块,我们之前也一直在用。

-----------------

#C:/Python33/HwhCode#Filename: mymodule.py#####mymodule########def sayhi():    print('Hi, this is mymodule speaking.')__version__ = '0.1'#End of mymodule.py

-----------------

#C:/Python33/HwhCode#Filename: mymodule_demo.pyimport mymodulemymodule.sayhi()print('Version',mymodule.__version__)
---------------


知识点:

(1)我们使用了相同的点符号,来调用模块的成员。

(2)尽量不要使用from mymodule import sayhi,__version__或者from mymodule import *。这样虽然可以直接使用sayhi,但是也可能有冲突。

(3)from mymodule import *不会引入__version__,因为他是双下划线开始的。

6、dir函数

可以使用dir函数列出模块定义的标识符。标识符有函数、类和变量。

当你使用dir()提供一个模块名的时候,他返回模块定义的名称列表。如果不提供参数,它返回当前模块的定义的名称列表。



7、包

变量通常在函数内部运行,函数和全局变量通常在模块内部运行。

如果你想组织自己的模块,就可以使用包。

包是模块的文件夹。有一个特殊的文件__init__.py,用来表明这个文件夹是特殊的,因为其包含了python模块。

例如,你想创建一个叫做world的包,有子包asia,africa,并且这些子包,又包含了india,madagascar等等模块。


包仅仅是为了方便层次化的组织模块。

8、总结:

函数在程序块中,可再利用。(反复调用)

包也是可以反复调用的。