eval() 执行字符串,通常用来完成类型转换
模块
'''
模块:使用python创建的.py文件
把模块集合到一起组成的文件夹(文件夹下有一个__init__.py文件,该文件夹称之为包)
模块的导入方式:import | from import
绝对导入:通过绝对路径导入,一定只能绝对导入
可以其别名: import 模块名 as 别名
注:import * 默认导入的是 __all__, __all__用来管理模块中能被被*导入的变量,__all__为一个列表,系统默认不会将_开头的变量放入列表
1.将被导入的模块编译形成对应的pyc文件
2.进入模块,从上执行执行模块中的代码,将产生的所有名字存放在该模块文件的全局名称空间中
3.在使用模块的文件中,产生一个与模块名(模块文件名)同名的名字,指向模块的全局名称空间
再次导入模块,不会执行前两步,只会在导入模块的文件中产生一个名字,指向第一次导入时内存中产生的全局名称空间
环境变量: sys.path
环境变量是一个存放绝对路径的列表
模块:内置模块,自定义模块(系统,自己定义,第三方)
加载模块的顺序:根据环境变量list中的顺序进行加载
list中第一位一定是当前执行文件的所在路径
内存 > 内置模块 > 自定义 自定义的模块根据环境变量list中的顺序进行加载
链式导入: t1导入m1,m1导入m2,m2导入m3
执行流程:右键执行t1,在t1导入m1模块的地方直接进入m1,去执行m1,同理在m1执行过程中遇到导入m2,会马上进入m2,去执行m2,一直到m3,m3执行完毕,会回到 m2中导入m3的语句,接着往下执行m2,m2执行完毕回到m1,以此类推返回到t1
在整个执行流程中,遇到任何模块的二次导入,都是直接引用内存中的名称空间,不会再次进入模块
循环导入:名字没有产生就使用名字
解决循环导入:先产生名字,在导入模块
将会产生循环导入的模块,导入语法延后 - 延后导入
问题
m1.py
import m2
print(m2.y)
x = 666
m2.py
import m1
print(m2.x)
y = 888
解决
m1.py
x = 666
import m2
print(m2.y)
m2.py
y = 888
import m1
print(m2.x)
'''