网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月05日漏签0天
vbs吧 关注:18,252贴子:104,525
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 7回复贴,共1页
<<返回vbs吧
>0< 加载中...

Python中下划线的5种含义

  • 只看楼主
  • 收藏

  • 回复
  • ITZayne
  • 中级粉丝
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
本文介绍了Python中单下划线和双下划线("dunder")的各种含义和命名约定,名称修饰(name mangling)的工作原理,以及它如何影响你自己的Python类。
单下划线和双下划线在Python变量和方法名称中都各有其含义。有一些含义仅仅是依照约定,被视作是对程序员的提示 - 而有一些含义是由Python解释器严格执行的。
如果你想知道“Python变量和方法名称中单下划线和双下划线的含义是什么?”,我会尽我所能在这里为你解答。


  • ITZayne
  • 中级粉丝
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
在本文中,我将讨论以下五种下划线模式和命名约定,以及它们如何影响Python程序的行为:
单前导下划线:_var
单末尾下划线:var_
双前导下划线:__var
双前导和末尾下划线:__var__
单下划线:_
在文章结尾处,你可以找到一个简短的“速查表”,总结了五种不同的下划线命名约定及其含义,以及一个简短的视频教程,可让你亲身体验它们的行为。
让我们马上开始!


2025-08-05 12:25:29
广告
不感兴趣
开通SVIP免广告
  • ITZayne
  • 中级粉丝
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1. 单前导下划线 _var
当涉及到变量和方法名称时,单个下划线前缀有一个约定俗成的含义。 它是对程序员的一个提示 - 意味着Python社区一致认为它应该是什么意思,但程序的行为不受影响。
下划线前缀的含义是告知其他程序员:以单个下划线开头的变量或方法仅供内部使用。 该约定在PEP 8中有定义。
这不是Python强制规定的。 Python不像Java那样在“私有”和“公共”变量之间有很强的区别。 这就像有人提出了一个小小的下划线警告标志,说:
“嘿,这不是真的要成为类的公共接口的一部分。不去管它就好。“
看看下面的例子:
class Test:
def __init__(self):
self.foo = 11
self._bar = 23


  • ITZayne
  • 中级粉丝
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
如果你实例化此类,并尝试访问在__init__构造函数中定义的foo和_bar属性,会发生什么情况? 让我们来看看:
>>> t = Test()
>>> t.foo
11
>>> t._bar
23


  • ITZayne
  • 中级粉丝
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你会看到_bar中的单个下划线并没有阻止我们“进入”类并访问该变量的值。
这是因为Python中的单个下划线前缀仅仅是一个约定 - 至少相对于变量和方法名而言。
但是,前导下划线的确会影响从模块中导入名称的方式。
假设你在一个名为my_module的模块中有以下代码:
# This is my_module.py:
def external_func():
return 23
def _internal_func():
return 42


  • ITZayne
  • 中级粉丝
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
现在,如果使用通配符从模块中导入所有名称,则Python不会导入带有前导下划线的名称(除非模块定义了覆盖此行为的__all__列表):
>>> from my_module import *
>>> external_func()
23
>>> _internal_func()
NameError: "name '_internal_func' is not defined"


  • ITZayne
  • 中级粉丝
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
顺便说一下,应该避免通配符导入,因为它们使名称空间中存在哪些名称不清楚。 为了清楚起见,坚持常规导入更好。
与通配符导入不同,常规导入不受前导单个下划线命名约定的影响:
>>> import my_module
>>> my_module.external_func()
23
>>> my_module._internal_func()
42


  • ITZayne
  • 中级粉丝
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我知道这一点可能有点令人困惑。 如果你遵循PEP 8推荐,避免通配符导入,那么你真正需要记住的只有这个:
单个下划线是一个Python命名约定,表示这个名称是供内部使用的。 它通常不由Python解释器强制执行,仅仅作为一种对程序员的提示。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 7回复贴,共1页
<<返回vbs吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示