夜暗归云绕柁牙,江涵星影鹭眠沙。
行人怅望苏台柳,曾与吴王扫落花。
我平时很常见到的带有下划线的python变量有两种:
- 前后双下划线,我之前的理解是python程序中的类似meta data的信息,例如
__name__
变量 - 前单下划线,python类中的私有变量或函数
- 单独下划线,用来表示上一个输出(在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