1、当你在交互解释器中,import一个模块后,再次import这个模块是不生效的,因为导入模块是一个开销很大的操作,以至于每个程序运行不能重复多余一次。所以当你成功import一个模块后,然后再修改这个模块的代码并保存即使再import是不会在当前会话下生效的,如果想再次运行这个文件,就得使用reload函数,这样就保证在修改并保存后会发生变化。这里script.py文件就一句打印语句输出11,然后成功导入后我改成12.

2、在3.0中,reload是imp模块内的一个函数,必须导入imp模块才能使用,并且reload函数的参数是模块名。(在2.6中,reload是内置函数,直接在终端调用就行,不需要导入imp和reload。),还有就是reload函数的参数的模块必须是之前成功导入的。我们再开一个终端

可以发现在reload之前没有import这个script模块,所以会报错。
3、模块相当于一个’对象‘,模块里的变量就相当于模块的属性,获取属性,可以通过import把模块整体导入,然后使用模块名再跟一个属性名,第二种是可以from从模块中获取变量名,但是这是复制的变量名。查看模块里所有的变量可以用dir函数,参数是模块名,返回一个列表。
4、reload是不可传递的,重载一个模块之后只会重载这个模块,而不会重载该模块导入的其他模块,所以有时候要重载很多模块。
我们再写一个script2.py的模块里面
#script2.py
import script
a = '123s'
def fun():
script.fun()
#script.py`
#print(12)
def fun():
print('hi')

然后我们再修改script.py打印hi变成hello,再重载script2.py

可以看到输出还是hi。
4、from导入不同模块的同一变量名,那么在该模块中会使用哪个模块的变量呢?
#a.py
a = 1
#b.py
a = 2
#c.py
from a import a
from b import a
print(a)
输出:
2
把from两句前后换一下,输出就变成了1。
5、exec和from一样,缺点是当前正在使用的变量有潜在的默认覆盖的可能
a = 12
exec(open('a.py').read())
a
1
6、import每个进程只运行文件一次,并且它会把文件生成的到一个单独的模块名称空间中,以便它的赋值不会改变你的作用域中的变量,但是缺点就是每次修改源码之后需要重载。
早上在图书馆看到这书就看了一点,觉得还不错,毕竟看廖老师的教程不够全面,很多都没涉及,所以还是希望全面了解python,所以选了这本。还有今天廖老师的实战第一天环境配置比较简单就没记笔记了。最后推荐一首周笔畅的对嘴。
网友评论