[Python Basics]下划线变量

夜暗归云绕柁牙,江涵星影鹭眠沙。
行人怅望苏台柳,曾与吴王扫落花。

我平时很常见到的带有下划线的python变量有两种:

  1. 前后双下划线,我之前的理解是python程序中的类似meta data的信息,例如__name__变量
  2. 前单下划线,python类中的私有变量或函数
  3. 单独下划线,用来表示上一个输出(在python Interactive console中)。常见用法for _ in theList

今天遇到了一些新的挑战:

  • `from feature import absolute_import
  • author = "JOJO"

本着“留下记录以加强记忆”的美好愿景,我检索并选择这个网站的解释进行翻译(曾经我莫名其妙地不喜欢这种翻译工作,现在倒是受用得很。唉)

Python中有五种下划线变量

  • 前置单下划线
  • 后置单下划线
  • 前置双下划线
  • 前后双下划线
  • 单下划线

前置单下划线

import的时候,以前置单下划线开头的对象不会被引入(内部函数)

# This is my_module.py:

def external_func():
    return 23

def _internal_func():
    return 42
>>> from my_module import *
>>> external_func()
23
>>> _internal_func()
NameError: "name '_internal_func' is not defined"

但是作为常规引入(regular imports)的变量还是可以可以读的:

>>> import my_module
>>> my_module.external_func()
23
>>> my_module._internal_func()
42

后置单下划线

一般来说,后置单下划线被用来避免和python内置关键词冲突

>>> def make_object(name, class):
SyntaxError: "invalid syntax"

>>> def make_object(name, class_):
...     pass

前置双下划线

前置双下划线被称为命名撕裂?(name mangling)。python解释器在面对这种变量时会对变量重新命名,从而形成一种只有内部方法可以访问的效果(内部参数):

class Test:
    def __init__(self):
        self.foo = 11
        self._bar = 23
        self.__baz = 23
>>> t = Test()
>>> dir(t)
['_Test__baz', '__class__', '__delattr__', '__dict__', '__dir__',
 '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',
 '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__',
 '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
 '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
 '__weakref__', '_bar', 'foo']
class ManglingTest:
    def __init__(self):
        self.__mangled = 'hello'

    def get_mangled(self):
        return self.__mangled

>>> ManglingTest().get_mangled()
'hello'
>>> ManglingTest().__mangled
AttributeError: "'ManglingTest' object has no attribute '__mangled'"

前后双下划线

这种变量被python解释器预留,命名和访问都是正常的。

单下划线

临时变量

接下来需要进行的工作:
PEP8规范编程

原文地址:https://www.cnblogs.com/ziangzhang/p/11964844.html

时间: 2024-11-05 11:35:46

[Python Basics]下划线变量的相关文章

python 单下划线/双下划线使用总结(转载)

python 单下划线/双下划线使用总结 时间:2013-10-08 10:56来源:www.chengxuyuans.com Python 用下划线作为变量前缀和后缀指定特殊变量/方法. 主要存在四种情形1.    1. object # public    2. __object__ # special, python system use, user should not define like it    3. __object # private (name mangling duri

[python]专用下划线标识符

1. python用下划线作为变量前缀和后缀,来指定特殊变量. _xxx: 不用'from module import *'导入,一般被看作是私有的,在模块或类外不可用使用. __xxx__: 系统定义名字 __xxx: 类中的私有变量名 2. 判断模块是被导入还是被直接执行 如果模块是被导入,__name__的值为模块名字. 如果模块是被直接执行,__name__的值为'__main__'

什么是Name_mangling以及python的下划线约定

name mangling (又叫name decoration命名修饰).在很多现代编程语言中,这一技术用来解决需要唯一名称而引起的问题,比如命名冲突/重载等. 在python中,双下划线开头的类变量就用到了name mangling技术,会自动加上类名前缀. 有什么用呢?可以防止意外在子类或者类外面被修改到.虽然单下划线开头的变量也有private的意味,但是更多的只是个约定,可以直接访问到.而双下划线开头的变量更彻底. 下面看代码. #coding=utf-8 class A: def _

python(七) Python中单下划线和双下划线

Python中单下划线和双下划线: 一.分类 (1).以单下划线开头,表示这是一个保护成员,只有类对象和子类对象自己能访问到这些变量. 以单下划线开头的变量和函数被默认是内部函数,使用from module improt *时不会被获取,但是使用import module可以获取. (2).以单下划线结尾仅仅是为了区别该名称与关键词 (3).双下划线开头,表示为私有成员,只允许类本身访问,子类也不行.在文本上被替换为_class__method  (4).双下划线开头,双下划线结尾.一种约定,P

Python中单下划线和双下划线

Python中单下划线和双下划线: 一.分类 (1).以单下划线开头,表示这是一个保护成员,只有类对象和子类对象自己能访问到这些变量. 以单下划线开头的变量和函数被默认是内部函数,使用from module import *时不会被获取,但是使用import module可以获取. (2).以单下划线结尾仅仅是为了区别该名称与关键词 (3).双下划线开头,表示为私有成员,只允许类本身访问,子类也不行.在文本上被替换为_class__method  (4).双下划线开头,双下划线结尾.一种约定,P

python下划线变量的含义

_xxx      不能用'from module import *'导入 __xxx__ 系统定义名字 __xxx    类中的私有变量名 核心风格:避免用下划线作为变量名的开始. "单下划线" 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量:如果修改,无需通知外部."双下划线" 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据. 以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访

Python中单下划线开头的特性

1.带有单下划线的特性不会被 from module import *导入. 2.单下划线是Python程序员使用类时的约定,表明程序员不希望类的用户直接访问属性.仅仅是一种约定!实际上,实例._变量,可以被访问. 参考资料: http://blog.csdn.net/debugm/article/details/8179482

python——双下划线与python命名机制

python中双下划线的作用(1)所有以双下划线开头的成员是私有的(2)python对于私有变量是会进行扎压(mangling)的,扎压规则是原始定义:class A():    __function():          print '__function is private! '扎压之后:class A():    _A__function():          print '__function is private!' 同时,在class A中对于以前__function()的调用

python的下划线

首先是单下划线开头,这个被常用于模块中,在一个模块中以单下划线开头的变量和函数被默认当作内部函数,如果使用 from a_module import * 导入时,这部分变量和函数不会被导入.不过值得注意的是,如果使用 import a_module 这样导入模块,仍然可以用 a_module._some_var 这样的形式访问到这样的对象. 在 Python 的官方推荐的代码样式中,还有一种单下划线结尾的样式,这在解析时并没有特别的含义,但通常用于和 Python 关键词区分开来,比如如果我们需