2019/12/02 02-import和from语句使用
把大量的代码切分成模块,在一些编程语言,称为模块,包(java),库(c语言),是代码组织方式
python只有一种模块对象类型,但是为了模块化组织模块的便利,提供了“包”的概念。
模块module,指的是python的源代码文件。(包是把这些模块组织在一起,和包名一致的目录及目录下的.py文件)
包package,指的是模块组织在一起的和包名同名的目录及其相关文件
如何知道你导入什么,导入的东西实际上也是标识符,通过名称找到这个模块名
是一个模块的实例,type之后发现是class module,背后是一个模块对象,跟函数名,类名类似,通过os这样一个名称跟模块建立关联,在当前环境中,与模块对象建立关联
就可以直接调用这个方法
查看os.path是什么,os.path是模块,一般吧模块组织起来称为包,但是类型还是module
os.path 加载的不一样
这个称为名词空间,os就算名词,目前运行环境也称全局环境
os.path里面有这个
明确告诉你导入的不合适模块类型,导入的其实是一个函数
现在换了别名就是ospath,这一回不回把os放进来(之前import os 和import,os.path导入的都是os模块)
现在就是把ospath做为一个名词导入了,这个标识符对应os.path模块对象
pl对应的就是这个模块对象,需要先把这个模块对象创建出来然后拿标识符对应起来
path是类不是模块所以不允许
impot后面只能写,模块类型,(包也是模块类型),只能出现模块,其他都不允许
1、找到指定的模块,加载和初始化它, 生成模块对象。找不到,抛出ImportError异常
2、在import所在的作用域的局部命名空间中,增加名称和上一步创建的对象关联
导入非顶级模块,指匠情挑顶级模块名称加入到本地名词空间中。导入的模块必须使用完全限定名称来访问
如果使用了as,as后的名称直接绑定到导入的模块对象,并将该名加入到本地名词空间中。
from
用from。从什么导入什么,现在导入的是名词是path,os没进来
os没有,path没有
导入函数和类都可以,
试试方法,方法是特殊函数,现在提示模块没找到
from后面必须是模块,import,函数,模块,类
甚至可以导入pathlib的变量
用from语句最后可以导入类,函数,变量,模块,但是要求from后面只能是模块
这里就是指的是把什么样的名词加入到名词空间里去
用from语句特点是,from紧跟的模块不会填入到当前的名词空间中,而impot是写什么加进来什么
from后面的仅仅是加载不会加入到名词空间,import的后面的东西不仅要加载,还要把加载的东西加入到名词空间里供你使用
这个标识符类似局部变量,函数,类,各有各的作用域,但是名词空间不能完全跟作用域划等号,但是可以先这么理解
导入的叫标识符也可以叫名词
还可以这么写,这样就证明跟作用域相关
会把后面的作为标识符加到本地的名词空间当中
保护成员_,私有成员__,公共成员
这些都是当前一些模块的属性
这些是导入进来的
这些都看不到,去哪里了
星号比较特殊,这两个一样
这三种方式是同一种对象,地址一样
找到from子句中指定的模块,加载并初始化它(不是导入),导入是导入到名词空间里
对于import子句后的名称,只能导入顶级模块否则只能用别名
先查找from子句后面是否是模块,是模块就加载模块。有没有你要导入的属性
如果os.path,path是属性就直接加载属性,下面有个子模块叫path,优先用属性,属性找不到再找有没有这个模块(优先找属性,后找,模块)
如果属性没找到,模块没找到,就抛出importerror、
这个名称保存到本地名词空间中,如果有as子句,则使用as子句后的名称
在这里导入要弄明白,使用dir,或者locals内建函数,这两个在这里是等价的