module
- 模块能定义函数,类和变量,模块里也能包含可执行的代码
- 相关的代码进行单独的组织会使代码更容易理解并被复用
python module.py 时,其__name__被设置为"main"
import
- import语句应放在模块的初始位置
- 搜索路径:当前目录或存储在sys.path的路径
- 可通过模块名称来访问模块成员
- 模块在解释器会话中只导入一次
- 如果更新需要重启解释器或者重新加载
import imp
imp.reload(modulename)
dir()
- 按模块名搜索模块定义并返回一个字符串类型的命名列表
- 无参数调用时,dir()函数返回当前模块定义的命名
包内引用
- from module import name来显式导入
- 用点号标明关联导入当前和上级包
from . import b
from .. import d
from ... import e
命名空间
各个命名空间是独立的,虽然一个命名空间中不能有重名,但不同的命名空间中可以重名
三种类型
内置名称 built-in names
python语言内置的名称,比如函数名abs和异常名称exception等
全局名称 global names
模块中定义的名称,如函数、类、其他导入的模块、模块级的变量和常量
局部名称 local names
函数中定义的名称,如函数的参数和局部变量等,或类中定义的函数及变量等
查找顺序
命名空间的生命周期
python中只有模块module、类class以及函数def、lambda才会引入新的作用域。
四种作用域
- L(Local)
最内层,包含局部变量 - E(Enclosing)
包含了非局部(non-local)也非全局(non-global)的变量,例如闭包 - G(Global)
当前模块的最外层,比如当前模块的全局变量 - B(Built-in)
包含了内建的变量、关键字等 搜索规则顺序: L -> E -> G -> B
format函数
格式化输出
符号 | 含义 |
---|
b | 二进制 | d | 十进制 | o | 八进制 | x | 十六进制 | !s | 将对象格式化转换成字符串 | !a | 将对象格式化转换成ASCII | !r | 将对象格式化转换成repr |
>>> print('{!a}'.format('天津tianjin'))
'\u5929\u6d25tianjin'
f-strings
year = 2016
event = 'Ceremony'
print(f'Results of the {year} {event}')
yes_votes = 42_572_654
no_votes = 43_132_495
percentage = yes_votes / (yes_votes + no_votes)
print(f'{yes_votes:-9} YES votes {percentage:2.2%}')
animals='eels'
print(f'My hovercraft is full of {animals!r}.')
Results of the 2016 Ceremony
42572654 YES votes 49.67%
My hovercraft is full of 'eels'.
序列化与反序列化
序列化 serialization
将程序中的对象保存到文件中以永久存储
反序列化 deserialization
从文件中创建上一次程序保存的对象
|