当前位置:网站首页>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函数为什么这么特殊
边栏推荐
- Answer to the first stage of the assignment of "information security management and evaluation" of the higher vocational group of the 2018 Jiangsu Vocational College skills competition
- CompletableFuture使用详解
- JDBC database connection pool usage problem
- 什么情况下考虑分库分表
- Stack and queue-p79-9
- 场馆怎么做体育培训?
- Learning records on July 4, 2022
- POI export to excel: set font, color, row height adaptation, column width adaptation, lock cells, merge cells
- unity3d学习笔记
- Problems and precautions about using data pumps (expdp, impdp) to export and import large capacity tables in Oracle migration
猜你喜欢
unity3d学习笔记
Installing redis and windows extension method under win system
JESD204B时钟网络
Basic introduction of JWT
This article introduces you to the characteristics, purposes and basic function examples of static routing
反射(二)
大促过后,销量与流量兼具,是否真的高枕无忧?
MATLAB小技巧(29)多项式拟合 plotfit
MySQL installation
2018年江苏省职业院校技能大赛高职组“信息安全管理与评估”赛项任务书第二阶段答案
随机推荐
Bus message bus
Navicat importing 15g data reports an error [2013 - lost connection to MySQL server during query] [1153: got a packet bigger]
大促过后,销量与流量兼具,是否真的高枕无忧?
Abnova 免疫组化服务解决方案
Please answer the questions about database data transfer
从零到一,教你搭建「CLIP 以文搜图」搜索服务(二):5 分钟实现原型
impdp的transform参数的测试
网络基础 —— 报头、封装和解包
Cloudcompare point pair selection
Initial experience of addresssanitizer Technology
Under what circumstances should we consider sub database and sub table
Get the city according to IP
Installing redis and windows extension method under win system
leetcode 509. Fibonacci Number(斐波那契数字)
Config distributed configuration center
Networkx绘图和常用库函数坐标绘图
一文带你了解静态路由的特点、目的及配置基本功能示例
【mysqld】Can't create/write to file
Config分布式配置中心
DB2获取表信息异常:Caused by: com.ibm.db2.jcc.am.SqlException: [jcc][t4][1065][12306][4.25.13]