python菜鸟教程学习11:模块
如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了。为此 Python 提供了一个办法,把这些定义存放在文件中,为一些脚本或者交互式的解释器实例使用,这个文件被称为模块。模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用 python 标准库的方法。
import sysprint("命令行参数如下:")for i in sys.argv:print(i)print("Python 路径为:
", sys.path, "")
import语句
想使用 Python 源文件,只需在另一个源文件里执行 import 语句,一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。当我们使用import语句的时候,Python解释器是怎样找到对应的文件的呢?这就涉及到Python的搜索路径,搜索路径是由一系列目录名组成的,Python解释器就依次从这些目录中去寻找所引入的模块。这看起来很像环境变量,事实上,也可以通过定义环境变量的方式来确定搜索路径。搜索路径是在Python编译或安装的时候确定的,安装新的库应该也会修改。搜索路径被存储在sys模块中的path变量。
sys.path 输出是一个列表,其中第一项是空串"",代表当前目录(若是从一个脚本中打印出来的话,可以更清楚地看出是哪个目录),亦即我们执行python解释器的目录(对于脚本的话就是运行的脚本所在的目录)。
如果你打算经常使用一个函数,你可以把它赋给一个本地的名称:
>>> fib = fibo.fib>>> fib(500)1 1 2 3 5 8 13 21 34 55 89 144 233 377
Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中
>>> from fibo import fib, fib2>>> fib(500)1 1 2 3 5 8 13 21 34 55 89 144 233 377
from xx import*和import XX的区别
funcname 被直接导入到本地名字空间去了,所以它可以直接使用,而不需要加上模块名的限定* 表示,该模块的所有公共对象(public objects)都被导入到当前的名称空间,也就是任何只要不是以”_”开始的东西都会被导入。
深入模块
模块除了方法定义,还可以包括可执行的代码。这些代码一般用来初始化这个模块。这些代码只有在第一次被导入时才会被执行。每个模块有各自独立的符号表,在模块内部为所有的函数当作全局符号表来使用。所以,模块的作者可以放心大胆的在模块内部使用这些全局变量,而不用担心把其他用户的全局变量搞混。从另一个方面,当你确实知道你在做什么的话,你也可以通过 modname.itemname 这样的表示法来访问模块内的函数。
__name__属性
一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。
if__name__ == "__main__":print("程序自身在运行")else:print("我来自另一模块")
每个模块都有一个__name__属性,当其值是"__main__"时,表明该模块自身在运行,否则是被引入。注意__name__ 与 __main__ 底下是双下划线。
dir( )函数
内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回,
>>> import fibo, sys>>> dir(fibo)[
"__name__", "fib", "fib2"]>>> dir(sys)
如果没有给定参数,那么 dir() 函数会罗列出当前定义的所有名称。
包
包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。注意当使用 from package import item 这种形式的时候,对应的 item 既可以是包里面的子模块(子包),或者包里面定义的其他名称,比如函数,类或者变量。import 语法会首先把 item 当作一个包定义的名称,如果没找到,再试图按照一个模块去导入。如果还没找到,抛出一个 :exc:ImportError 异常。反之,如果使用形如 import item.subitem.subsubitem 这种导入形式,除了最后一项,都必须是包,而最后一项则可以是模块或者是包,但是不可以是类,函数或者变量的名字。
以上是 python菜鸟教程学习11:模块 的全部内容, 来源链接: utcz.com/z/537925.html