part5_chapter23_module code basic
一个意外发现
书中原例
#f.py
print("hello");
x = 1;
y = [4,5];
>>> from f import x,y
hello
>>> x =10
>>> y[0]=99
>>> import f
>>> f.x
1
>>> f.y
[99, 5]
把两个两个import对调
>>> import f
hello
>>> f.x =10
>>> f.y[0]=99
>>> from f import x,y
>>> x ##这里的x, y 不是原来的f.py 而是上一个对象
10
>>> y
[99, 5]
>>> f.x=11
>>> f.y[1]=999
>>> x
10
>>> y
[99, 999]
为什么会这样呢?from只是把名称从一个模块复制到另一个模块,from module import name1,name2 可以等价以下形式
import module
name1 = module.name1;
name2 = module.name2;
如果这么理解,那第一种方式就解释不通了。????
等有空得看下源码才知道了。
question
怎么创建模块?
一个文件即是一个模块,这个文件后缀是py, 文件名不能用保留字(for, if import。。。)
from 和import语句有什么关系?
from是导入整个模块,和import一样,但from会多做一步,从被导入的模块中复制一个或者多个属性到from所在的作用域。
reload和导入有什么关系?
reload是把之前导入的对象进行重新赋值。
在什么情况下必须用import,而不是 from?
当导入的模块中有同名属性时,只能用import
from语句的三种陷阱?
1 导入多个模块,同名时,后者会覆盖前者;
2 导入多个模块时,根据属性名,无法直观知道这是哪个模块属性;