import与exec执行文件的异同

1. import导入方式为2种,1)import 模块名 2)from 模块 import 变量或函数。

这两者的区别是前者的引用需要用“模块名.函数名或变量名”的方式引用,且模块中有与当前文件同名的对象时,不会覆盖当前文件中的对象。

另一个值得注意的地方是,import导入的函数的名称空间仍然在原来的模块中。比如,当前环境中和被导入模块都存在一个变量x, 即使在当前环境中修改了X,此时执行被导入模块中的函数B,B中使用了X,此时发现B中的X的值仍然是修改之前的X。

 1 ##test_0.py
 2 x=99
 3 def show_0():
 4     print(x)
 5 
 6 ##test_1.py
 7 from test0 import *
 8 
 9 def show_1():
10     print(x)
11 
12 x=1
13 show_0()
14 show_1()

此时执行的结果如下:

99

1

这个比较奇特,所以import导入文件并不简单地合二为一,各自还是存在自己的作用域。

2. exec执行其他文件。

exec和import在功能上还是有较大区别,exec是执行整个文件,而无法选择其中的函数。而import在导入时“附带地”执行最外层的代码,其主要作用还是执行其中的函数。在都执行最外层代码的情况下,这两种方法的区别是exec像是将代码合二为一,会影响当前环境的变量。import执行文件时,如果是“import 模块名“的形式,则不会影响其中的变量;如果是“from 模块名 import 变量”,则会影响。但如前面所说,并不是合而为一。

扫描二维码关注公众号,回复: 2819741 查看本文章

猜你喜欢

转载自www.cnblogs.com/qinfei88/p/9494867.html