Python 热门面试题二

Python中以下划线开头的变量名有什么特点?

在Python中,以下划线开头的变量名具有特定的含义和用法,主要分为几种情况:

  1. 单个下划线开头(_var

    • 这样的变量名在Python中有一种习惯用法,即用来表示这个变量是私有的或者说是在模块或类内部使用的。但这只是一种约定俗成的命名习惯,实际上Python并没有强制的私有变量概念(与Java、C++等语言不同)。Python中,任何以单个下划线开头的变量名都不会被Python解释器特殊处理,它们仍然是可以被外部访问的。
    • 在一些库或框架中,这种命名方式也被用来表示该变量是"受保护的"或者"内部使用的",但开发者仍然应该避免直接访问这样的变量,因为它们可能在不同的版本中发生变化。
  2. 双下划线开头(__var

    • 这种命名方式被称为"名称改写"(name mangling)或"名称修饰"(name mangling)。当一个类的属性以双下划线开头时,Python会自动将属性名改为_类名__属性名的形式。这样做的目的是为了避免子类与父类之间的属性名冲突。
    • 需要注意的是,这种属性仍然是可以通过对象访问的,但你需要使用改写后的属性名。这增加了代码的复杂度,并通常用于需要隐藏属性细节的情况。
  3. 双下划线开头和结尾(__var__

    • 这种命名方式在Python中通常用于特殊方法(也称为魔术方法或双下划线方法),如__init____str____add__等。这些方法是Python的内置方法,用于实现类的特殊功能,如初始化对象、定义对象的字符串表示、定义对象之间的加法操作等。
    • 开发者不应该自定义以双下划线开头和结尾的方法名,除非你是在编写扩展Python内建类型的新式类,或者你在完全理解这些方法的工作原理的情况下。
  4. 单个下划线(_

    • 在Python中,单个下划线作为一个变量名(通常作为循环中的临时变量)是一种约定俗成的做法,表明这个变量是临时的或不重要的。例如,在处理元组解包或迭代中,你可能不想保存某些值,此时就可以使用_作为占位符。
    • 此外,在Python的交互式解释器中,_变量被用来保存上一次表达式的结果,这可以作为一种快速查看或重用上次计算结果的方式。

总之,在Python中以下划线开头的变量名主要用于特殊用途或遵循特定的命名约定,以区分普通变量和具有特殊含义的变量。

__name__变量在Python脚本中的作用是什么?

__name__ 变量在Python脚本中扮演着非常重要的角色,它用于指示一个模块是被直接运行还是被导入到其他模块中。在Python中,模块既可以是被直接执行的脚本文件,也可以是被其他脚本导入的库文件。

当Python文件被直接运行时,__name__ 变量的值会被设置为字符串 "__main__"。相反,如果该文件是被导入到其他文件中的,__name__ 的值则会被设置为该模块的名字(即不包含路径的文件名)。

这个特性经常被用于在模块中编写可重用的代码,同时又能够直接运行该模块进行测试或演示。通过在模块中检查 __name__ 的值,可以编写条件语句来决定是否执行某些代码块。

下面是一个简单的例子来说明 __name__ 的用法:

python 复制代码
# mymodule.py

def my_function():
    print("Hello from my_function")

if __name__ == "__main__":
    print("This module is being run directly")
    my_function()
else:
    print("This module has been imported")

# 在命令行中直接运行 mymodule.py
# 输出将会是:
# This module is being run directly
# Hello from my_function

# 如果从另一个文件中导入 mymodule,例如:
#
# import mymodule
#
# 则输出将会是:
# This module has been imported
# 因为此时 mymodule.py 并不是作为主程序运行的。

这个特性使得Python模块既可以作为脚本直接运行,也可以作为库被其他脚本导入,而无需修改模块内部的代码。这是Python模块系统灵活性和强大功能的一个体现。

相关推荐
m0_748554817 小时前
golang如何实现用户订阅偏好管理_golang用户订阅偏好管理实现总结
jvm·数据库·python
lee_curry8 小时前
第四章 jvm中的垃圾回收器
java·jvm·垃圾收集器
QQ1__8115175158 小时前
Spring boot名城小区物业管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
前端·vue.js·spring boot
钛态8 小时前
前端微前端架构:大项目的救命稻草还是自找麻烦?
前端·vue·react·web
一粒黑子8 小时前
【实战解析】阿里开源 PageAgent:纯前端 GUI Agent,一行JS让网页支持自然语言操控
前端·javascript·开源
独角鲸网络安全实验室8 小时前
2026微信小程序抓包全解析:从实操落地到合规风控,解锁前端调试新范式
前端·微信小程序·小程序·抓包·系统代理绕过·https证书严格校验·进程隔离
紫微AI8 小时前
前端文本测量成了卡死一切创新的最后瓶颈,pretext实现突破了
前端·人工智能·typescript
GISer_Jing8 小时前
AI前端(From豆包)
前端·aigc·ai编程
IT枫斗者8 小时前
前端部署后如何判断“页面是不是最新”?一套可落地的版本检测方案(适配 Vite/Vue/React/任意 SPA)
前端·javascript·vue.js·react.js·架构·bug
测试修炼手册8 小时前
[测试技术] 深入理解 JSON Web Token (JWT)
前端·json