当前位置:网站首页>main函数在import语句中的特殊行为

main函数在import语句中的特殊行为

2022-07-07 03:11:00 胜天半子_王二_王半仙

先说结论, import module时会执行module函数级别代码, 但是如果该module中有main函数, 并不会执行.
听起来比较复杂, 看下下面的代码就懂了, 也有一部分问题没有解决, 希望大佬来教学下

test_02.py

from test_03 import test_print

x = None
print 'test_02 execute'


def get_x():
	global x
	print 'get_X'
	return x


def set_x():
	global x
	print 'set_x'
	x = 10


if __name__ == '__main__':
	print 'execute main'
	set_x()
	print get_x()
	print '===================================='
	test_print()


test_03.py

def test_print():
	import test_02 as x
	print x.x

上面test_02执行, 调用了test_03中的 test_print(), test_print去打印test_02中的全局变量x, 却发现还是默认值,这是为什么呢?
看下打印结果
在这里插入图片描述
原来是test_03中执行import语句的时候, 执行了test_02中函数级别的语句, 并且如果我们给代码再改一改, 加上id, 看一下:
test_02

if __name__ == '__main__':
	print 'execute main'
	set_x()
	print get_x()
	print '===================================='
	test_print()
	print get_x()
	print id(x)

test_03

def test_print():
	from test_02 import x
	print x
	print id(x)

执行结果
在这里插入图片描述
我们发现id都不一样
也就是说test_03中import x的时候不仅执行了一遍test_02中的代码, 甚至都不是同一个对象了
但是如果我们把set_x()从main函数中提出到外面, 再看一遍结果
在这里插入图片描述
id又一样了, 这是为什么呢? 有没有大佬来解释一下main函数为什么这么特殊

原网站

版权声明
本文为[胜天半子_王二_王半仙]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_40666620/article/details/125646389