你忙于交际,频于应付,鸡同鸭讲的尴尬无处不在。你为了别人的欢笑而奔波,又为了别人的肯定而牺牲自我,你的人生仿佛都不是你的。其实,你根本不是在社交,而是无谓地蹉跎光阴!

1. 模块化
一般来说,编程语言中,库、包、模块是同一种概念,是代码组织方式。
Python中只有一种模块对象类型,但是为了模块化组织模块的便利,提供了"包"的概念。
模块module,指的是Python的源代码文件。
包package,指的是模块组织在一起的和包名同名的目录及其相关文件;
Python中模块分为以下几种:
(1)、系统内置标准模块:例如:sys、time、json模块等等;
(2)、自定义模块:自定义模块是自己写的模块,对某段逻辑或某些函数进行封装后供其他函数调用。
注意:自定义模块的命名一定不能和系统内置的模块重名,否则将不能再导入系统的内置模块。
例如:自定义了一个sys.py模块后,再想使用系统的sys模块是不能使用的;
(3)、第三方的开源模块:这部分模块可以通过pip install进行安装,有开源的代码;
2. 导入语句
语句 | 含义 |
---|---|
import 模块1[,模块2,...] | 完全导入 |
import ... as ... | 模块别名(加入到本地名词空间) |
from ... import ... | 可以导入模块、变量、类 |
import语句后 只接受模块;其他都不允许;, 加载后,加入到名词空间;
import语句
1、找到指定的模块,加载和初始化它,生成模块对象,找不到,抛出ImportError;
2、在import所在的作用域的局部空间中,增加名称和上一步创建的对象关联
单独运行下面例子,体
from ... import ... from 可以导入模块、变量、类;
from os import path # module
from os.path import normcase # 函数
from pathlib import Path # 类
from pathlib import supports symlinks as ss # 变量
总结
导入顶级模块,其名称会加入到本地名词空间中,并绑定到其模块对象。
导入非顶级模块,只将其顶级模块名称加入到本地名词空间中。导入的模块必须使用完全限定名称来访问。
如果使用了as,as后的名称直接绑定到导入的模块对象,并将该名称加入到本地名词空间中。
from语句
from pathlib import Path, PosixPath # 在当前名词空间导入该模块指定的成员
print(dir()) # [..., 'Path', 'PosixPath']
from pathlib import * # 在当前名词空间导入该模块所有公共成员(非下划线开头成员)或指定成员
print(dir()) # [..., 'Path', 'PosixPath', 'PurePath', 'PurePosixPath', 'PureWindowsPath','WindowsPath']
from functools import wraps as wr, partial # 别名
print(dir()) # [..., 'wr', 'partial']
from os.path import exists
import os
print(os.path.exists)
print(exists)
print(os.path.__dict__['exists'])
print(getattr(os.path, 'exists'))
# 上面4种方式获得同一个对象
#--------------------------------------------------------------------
<function exists at 0x00000248A8D456A8>
<function exists at 0x00000248A8D456A8>
<function exists at 0x00000248A8D456A8>
<function exists at 0x00000248A8D456A8>
总结
找到from子句中指定的模块,加载并初始化它(注意不是导入)
对于import子句后的名称:
- 先查from子句导入的模块是否具有该名称的属性
- 如果不是,则尝试导入该名称的子模块
- 还没有找到,则抛出ImportError异常
- 这个名称保存到本地名词空间中,如果有as子句,则使用as子句后的名称
网友评论