当前位置:网站首页>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函数为什么这么特殊
边栏推荐
猜你喜欢
随机推荐
SolidWorks GB Library (steel profile library, including aluminum profile, aluminum tube and other structures) installation and use tutorial (generating aluminum profile as an example)
根据IP获取地市
How to install swoole under window
常用函数detect_image/predict
Problems and precautions about using data pumps (expdp, impdp) to export and import large capacity tables in Oracle migration
【NOI模拟赛】区域划分(结论,构造)
How can clothing stores make profits?
leetcode 509. Fibonacci Number(斐波那契数字)
2018年江苏省职业院校技能大赛高职组“信息安全管理与评估”赛项任务书第一阶段答案
String (explanation)
Tool class: object to map hump to underline underline hump
反射(二)
场馆怎么做体育培训?
ESXI挂载移动(机械)硬盘详细教程
[noi simulation] regional division (conclusion, structure)
How to do sports training in venues?
Abnova循环肿瘤DNA丨全血分离,基因组DNA萃取分析
请教一下,监听pgsql ,怎样可以监听多个schema和table
Installing redis and windows extension method under win system
MySQL (x)