这部分学习的是菜鸟教程
python模块module
#!/usr/bin/python3
# 文件名: using_sys.py
import sys
print('命令行参数如下:')
for i in sys.argv:
print(i)
print('\n\nPython 路径为:', sys.path, '\n')
sys是python标准库中的模块,sys.argv
是一个包含命令行参数的列表。sys.path
包含了一个 Python 解释器自动查找所需模块的路径的列表
使用import
导入模块,当解释器遇到import语句时,会在搜索路径中寻找那个模块。路径通过sys.path
可以查看,第一个是当前路径,如果import进来不同的模块中有同名函数,后边的会覆盖掉前面的。
直接import module,要使用里面的函数的话要用module.func
来调用。
使用from module_name import name
可以只导入模块中的一部分函数或者对象。全部导入:from module import *
。
每个模块有各自独立的符号表,在模块内部为所有的函数当作全局符号表来使用。所以,模块的作者可以放心大胆的在模块内部使用这些全局变量,而不用担心把其他用户的全局变量搞混。
全部导入时,单一下划线(_)开头的名字不在此例。
一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。加了下面的代码就是导入时会运行else后面的。
if __name__ == '__main__':
print('程序自身在运行')
else:
print('我来自另一模块')
dir()函数
内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回,dir( module_name)
如果没有给定参数,那么 dir() 函数会罗列出当前定义的所有名称。包括模块中的变量名称(因为变量也是对象,除了可以导入模块中的函数,还可以导入类,变量等)
包
包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。比如一个模块的名称是 A.B, 那么他表示一个包 A中的子模块 B 。就好像使用模块的时候,你不用担心不同模块之间的全局变量相互影响一样,采用点模块名称这种形式也不用担心不同库之间的模块重名的情况。
目录只有包含一个叫做 init.py 的文件才会被认作是一个包
因为windows不区分大小写,所以导入语句遵循如下规则:如果包定义文件 init.py 存在一个叫做 all 的列表变量,那么在使用 from package import * 的时候就把这个列表中的所有名字作为包内容导入。包更新了,这个列表变量也要更新。
__all__ = ["echo", "surround", "reverse"]
使用这个包时,只会导入包里面的这三个子模块。
还有from . import XX
,from .. import XX
,from ..dirtory import XX
表示从当前目录导入,从上级目录导入,从上级目录的dictory文件夹导入。
python包管理工具时pip。
当使用anaconda时,Anaconda会把系统Path中的python指向自己自带的Python,并且,Anaconda安装的第三方模块会安装在Anaconda自己的路径下,不影响系统已安装的Python目录。