ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
模块是一个包含了定义函数和变量的文件, 后缀名是.py。 ``` import sys print('命令行参数') for i in sys.argv: print(i) print('\n\n Python 路径:\n\n',sys.path, '\n') ``` * import sys 引入标准库中的sys.py 模块 * sys.argv 是包含命令行参数的列表 * sys.path 包含了一个 Python 解释器自动查找所需模块的路径的列表 ## import 语句 语法: ``` import module1[,module2[, ....]] ``` * 搜索路径是一个解释器会先进行搜索的所有目录的列表。如想要导入模块 support,需要把命令放在脚本的顶端 * 一个模块只会被导入一次,不管你执行了多少次import * 搜索路径是由一系列目录名组成的,Python 解释器就依次从这些目录中去寻找所引入的模块。 这看起来很像环境变量,事实上,也可以通过定义环境变量的方式来确定搜索路径。搜索路径是在 Python 编译或安装的时候确定的,安装新的库应该也会修改。搜索路径被存储在 sys 模块中的 path 变量 sys.path 输出是一个列表,其中第一项是空串 '',代表当前目录(若是从一个脚本中打印出来的话,可以更清楚地看出是哪个目录),亦即我们执行python解释器的目录(对于脚本的话就是运行的脚本所在的目录)。 ## 模块定义 mymodule.py ``` def myfunc(): print('This is my function') ``` 命令行切换到目录 python import mymodule mymodule.myfunc() ## from ... import 直接把模块内(函数,变量的)名称导入到当前操作模块 这种导入的方法不会把被导入的模块的名称放在当前的字符表中 * 从模块中导入一个指定的部分到当前的命名空间 ``` from modname import name1[,name2[,....]] ``` ``` from mydodule import myfunc ``` 接下来就可以如此执行了 ``` myfunc ``` * from ... import * 把一个模块的所有内容全部导入到当前的命名空间 这将把所有的名字都导入进来,但是那些由单一下划线(\_)开头的名字不在此例。大多数情况, Python程序员不使用这种方法,因为引入的其它来源的命名,很可能覆盖了已有的定义。 ## 模块的导入 模块除了方法定义,还可以包括可执行的代码。这些代码一般用来初始化这个模块。这些代码只有在第一次被导入时才会被执行。 每个模块有各自独立的符号表,在模块内部为所有的函数当作全局符号表来使用。 所以,模块的作者可以放心大胆的在模块内部使用这些全局变量,而不用担心把其他用户的全局变量搞混。 从另一个方面,当你确实知道你在做什么的话,你也可以通过 modname.itemname 这样的表示法来访问模块内的函数。 ## 包 包是一种管理 Python 模块命名空间的形式 比如一个模块的名称是 A.B, 那么他表示一个包 A中的子模块 B 。 在导入一个包的时候,Python 会根据 sys.path 中的目录来寻找这个包中包含的子目录。 目录只有包含一个叫做 __init__.py 的文件才会被认作是一个包,主要是为了避免一些滥俗的名字(比如叫做 string)不小心的影响搜索路径中的有效模块。 最简单的情况,放一个空的 :file:__init__.py就可以了。当然这个文件中也可以包含一些初始化代码或者为(将在后面介绍的) __all__变量赋值。