day16

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)



'''
posted @ 2019-05-05 21:55  月薪20k  阅读(113)  评论(0)    收藏  举报