• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

SOC/IP验证工程师

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

Python中__main__的理解

1.概述
在Python中,每个.py文件称为一个模块(module), 每个module由会有它自己的attribute(官方翻译文档称为属性)。对于一个空的.py文件,它也至少包含9个内置attributes,这9个内置attribute如下:

['__annotations__', '__builtins__', '__cached__', '___doc_', '__file__', '__loader__', '__name__', '__package__', '__spec__']

1.1 内置attribute
比如,一个最简单的demo.py文件如下:

# demo.py
print(dir()) #dir()函数用以查看该Module的所有attribute

执行以后得到如下输出结果:

$python demo.py
['__annotations__', '__builtins__', '__cached__', '___doc_', '__file__', '__loader__', '__name__', '__package__', '__spec__']

1.2 定义一个新的变量
如果在demo.py中定义一个变量a,那么该module的attribute就会多一个:

# demo.py
a = 1 # 定义一个变量a
print(dir())

执行结果如下:(注意李彪最后多了个'a')

$python demo.py
['__annotations__', '__builtins__', '__cached__', '___doc_', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'a']

2 执行当前文件
如果当前文件被当做主程序(main program)执行时(注意Python没有main方法),那么当前文件/模块的__name__就会被定义为__main__,如:

#demo.py
print(__name__)

结果:

$python demo.py
__main__
  1. 作为被import的module
    3.1 同级文件import
    如果某.py文件/module作为被import的模块,那么该module的__name__将被定义为module的名字,如:
#demo.py
"""
.
|-- demo.py
|-- module.py
"""
from module import print_name
print_name()
#module.py
"""
.
|-- demo.py
|-- module.py
"""
def print_name():
  print(__name__)

执行结果如下:

$python demo.py
module

3.2 不同级文件import
如果不同级某.py文件/module作为被import的模块,那么该module的__name__将被定义为module的名字,同时加上路径,如:

#demo.py
"""
.
|-- demo.py
|-- trash
|   |-- module.py
"""
from trash.module import print_name
print_name()
#module.py
"""
.
|-- demo.py
|-- trash
|   |--- module.py
"""
def print_name():
  print(__name__)

执行结果如下:

$python demo.py
trash.module

posted on 2022-08-27 22:11  SOC验证工程师  阅读(414)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3