2019/12/02 02-import和from语句使用

2019/12/02 02-import和from语句使用
把大量的代码切分成模块,在一些编程语言,称为模块,包(java),库(c语言),是代码组织方式
python只有一种模块对象类型,但是为了模块化组织模块的便利,提供了“包”的概念。
模块module,指的是python的源代码文件。(包是把这些模块组织在一起,和包名一致的目录及目录下的.py文件)
包package,指的是模块组织在一起的和包名同名的目录及其相关文件
2019/12/02 02-import和from语句使用2019/12/02 02-import和from语句使用
如何知道你导入什么,导入的东西实际上也是标识符,通过名称找到这个模块名2019/12/02 02-import和from语句使用2019/12/02 02-import和from语句使用
是一个模块的实例,type之后发现是class module,背后是一个模块对象,跟函数名,类名类似,通过os这样一个名称跟模块建立关联,在当前环境中,与模块对象建立关联2019/12/02 02-import和from语句使用
就可以直接调用这个方法2019/12/02 02-import和from语句使用
查看os.path是什么,os.path是模块,一般吧模块组织起来称为包,但是类型还是module
os.path 加载的不一样
2019/12/02 02-import和from语句使用
这个称为名词空间,os就算名词,目前运行环境也称全局环境2019/12/02 02-import和from语句使用
os.path里面有这个2019/12/02 02-import和from语句使用
明确告诉你导入的不合适模块类型,导入的其实是一个函数2019/12/02 02-import和from语句使用
现在换了别名就是ospath,这一回不回把os放进来(之前import os 和import,os.path导入的都是os模块)
现在就是把ospath做为一个名词导入了,这个标识符对应os.path模块对象
2019/12/02 02-import和from语句使用
pl对应的就是这个模块对象,需要先把这个模块对象创建出来然后拿标识符对应起来2019/12/02 02-import和from语句使用
path是类不是模块所以不允许2019/12/02 02-import和from语句使用
impot后面只能写,模块类型,(包也是模块类型),只能出现模块,其他都不允许2019/12/02 02-import和from语句使用
1、找到指定的模块,加载和初始化它, 生成模块对象。找不到,抛出ImportError异常
2、在import所在的作用域的局部命名空间中,增加名称和上一步创建的对象关联
2019/12/02 02-import和from语句使用
导入非顶级模块,指匠情挑顶级模块名称加入到本地名词空间中。导入的模块必须使用完全限定名称来访问
如果使用了as,as后的名称直接绑定到导入的模块对象,并将该名加入到本地名词空间中。

2019/12/02 02-import和from语句使用

from

2019/12/02 02-import和from语句使用
用from。从什么导入什么,现在导入的是名词是path,os没进来2019/12/02 02-import和from语句使用
os没有,path没有2019/12/02 02-import和from语句使用
导入函数和类都可以,
试试方法,方法是特殊函数,现在提示模块没找到
2019/12/02 02-import和from语句使用
from后面必须是模块,import,函数,模块,类
2019/12/02 02-import和from语句使用2019/12/02 02-import和from语句使用
甚至可以导入pathlib的变量
2019/12/02 02-import和from语句使用
用from语句最后可以导入类,函数,变量,模块,但是要求from后面只能是模块
2019/12/02 02-import和from语句使用
这里就是指的是把什么样的名词加入到名词空间里去2019/12/02 02-import和from语句使用
用from语句特点是,from紧跟的模块不会填入到当前的名词空间中,而impot是写什么加进来什么
2019/12/02 02-import和from语句使用
from后面的仅仅是加载不会加入到名词空间,import的后面的东西不仅要加载,还要把加载的东西加入到名词空间里供你使用2019/12/02 02-import和from语句使用
这个标识符类似局部变量,函数,类,各有各的作用域,但是名词空间不能完全跟作用域划等号,但是可以先这么理解2019/12/02 02-import和from语句使用
导入的叫标识符也可以叫名词2019/12/02 02-import和from语句使用
还可以这么写,这样就证明跟作用域相关
2019/12/02 02-import和from语句使用2019/12/02 02-import和from语句使用2019/12/02 02-import和from语句使用
会把后面的作为标识符加到本地的名词空间当中2019/12/02 02-import和from语句使用
保护成员_,私有成员__,公共成员2019/12/02 02-import和from语句使用
这些都是当前一些模块的属性2019/12/02 02-import和from语句使用
这些是导入进来的2019/12/02 02-import和from语句使用
这些都看不到,去哪里了
2019/12/02 02-import和from语句使用
星号比较特殊,这两个一样
2019/12/02 02-import和from语句使用2019/12/02 02-import和from语句使用2019/12/02 02-import和from语句使用
这三种方式是同一种对象,地址一样2019/12/02 02-import和from语句使用2019/12/02 02-import和from语句使用
找到from子句中指定的模块,加载并初始化它(不是导入),导入是导入到名词空间里
对于import子句后的名称,只能导入顶级模块否则只能用别名
先查找from子句后面是否是模块,是模块就加载模块。有没有你要导入的属性
如果os.path,path是属性就直接加载属性,下面有个子模块叫path,优先用属性,属性找不到再找有没有这个模块(优先找属性,后找,模块)
如果属性没找到,模块没找到,就抛出importerror、
这个名称保存到本地名词空间中,如果有as子句,则使用as子句后的名称

在这里导入要弄明白,使用dir,或者locals内建函数,这两个在这里是等价的