精华内容
下载资源
问答
  • python 下划线意义

    2019-02-18 11:35:41
    python 下划线意义本文将解释下列五中下划线在python中的使用意义单一下划线:_单前导下划线:_var单末尾下划线:var_双前导下划线:__var双前导和双末尾下划线:_\_ var__ 本文将解释下列五中下划线在python中的...

    本文将解释下列五中下划线在python中的使用意义

    • 单一下划线:_
    • 单前导下划线:_var
    • 单末尾下划线:var_
    • 双前导下划线:__var
    • 双前导和双末尾下划线:__var__

    单一下划线:_

    单一下划线是用作一个名字,来表示某个变量是临时的或无关紧要的,或缺省。

    >>>for _ in range(0, 3):
        	print("python!") 
    python!
    python!
    python!
    >>>var, _, _ = 1, 0, 0
    >>>var
    1
    

    单前导下划线:_var

    python不像C++那样在“私有”和“公共”变量之间有很强的区别。 但是在python中,可以起到默认的小小的下划线警告标志,表示具有私有性质的成员属性,而不是真正会成为公共接口的一部分。

    >>>class FOO(object):
        	def __init__(self):
    	        self.f = 0
    	        self._f = 10
    >>>foo = FOO()
    >>>foo._f
    10
    

    单末尾下划线:var_

    单末尾下划线是由于像 class、def 这样的默认变量名称无法被使用,而采用添加单末尾下划线用以区分,来避免命名冲突。单个末尾下划线是一个约定,用来避免与Python关键字产生命名冲突。

    >>>def foo(var, class_)
    ...
    

    如果使用通配符从模块中导入所有名称,那么python不会导入带有前导下划线的名称(除非模块定义了覆盖此行为的__all__列表),大家可以尝试一下。

    双前导下划线:__var

    >>>class FOO(object):
        	def __init__(self):
    	        self.f = 0
    	        self._f = 10
    	        self.__foo = 12
    >>>foo = FOO()
    >>>dir(foo)
    ['_FOO__foo', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', 
    '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', 
    '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__',
     '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', 
     '__sizeof__', '__str__', '__subclasshook__',
     '__weakref__', '_f', 'f']
    

    我们能看到没有找到 ‘__foo’ 属性,但是多出了一个 '_FOO__foo’属性,这就是Python解释器所做的名称修饰, 这样做是为了防止变量在子类中被重写。而且该变量是无法直接获取的,是名称修饰,有点类似于私有成员,可以通过内部函数获取。

    >>>class FOO(object):
    		def __init__(self):
    			self.f = 0
    			self._f = 10
    			self.__foo = 12
    			self.__foo__ = 24
    		def get_f(self):
    			return self.__foo
    >>>f=FOO()
    >>>f.__foo
    File "***.py", line 2963, in run_code
        exec(code_obj, self.user_global_ns, self.user_ns)
      File "<ipython-input-16-5c407179b833>", line 1, in <module>
        f.__foo
    AttributeError: 'FOO' object has no attribute '__foo'
    >>>f.get_f()
    12
    >>>FOO()._FOO__foo
    12
    

    双前导和双末尾下划线:__var__

    一个变量名称同时以双下划线开始和结束,则不会应用名称修饰。 由双下划线前缀和后缀包围的变量不会被python解释器修改。

    >>>f.__foo__
    24
    

    python保留了有双前导和双末尾下划线的名称,用于特殊用途。例如,__init__对象构造函数,或__var__,使得一个对象可以被调用。最好避免在自己的程序中使用以双下划线开头和结尾的名称,以避免与将来python语言的变化产生冲突。

    展开全文
  • Python中并没有真正意义上的“私有”,类的属性的的可见性取决于属性的名字(这里的属性包括了函数)。例如,以单下划线开头的属性(例如_spam),应被当成API中非公有的部分(但是注意,它们仍然可以被访问),一般...

    Python中并没有真正意义上的“私有”,类的属性的的可见性取决于属性的名字(这里的属性包括了函数)。例如,以单下划线开头的属性(例如_spam),应被当成API中非公有的部分(但是注意,它们仍然可以被访问),一般是具体实现细节的部分。单下划线常用来实现模块级私有化,当我们使用“from mymodule import *”来加载模块的时候,不会加载以单下划线开头的模块属性。

    而以双下划线开头并最多以一个下划线结尾的属性(例如___spam),将会被替换成_classname__spam这样的形式,其中classname是当前类的类名。知道了这点之后,我们仍然可以访问到python的私有函数

    转载于:https://www.cnblogs.com/blogofwyl/p/4615760.html

    展开全文
  • 2014年3月14日,谷歌搜索结果页标题取消了下划线,和20年的老习惯说再见。这是一个很小的改动,却是一个很大的变革,意义非凡。  下划线去掉之后 ,现在的搜索结果页面看起来简洁大方了许多,这是互联网页面最大的...
    2014年3月14日,谷歌搜索结果页标题取消了下划线,和20年的老习惯说再见。这是一个很小的改动,却是一个很大的变革,意义非凡。
      下划线去掉之后 ,现在的搜索结果页面看起来简洁大方了许多,这是互联网页面最大的视觉需求之一。
      为什么意义这么大?下划线自从在60年代被用在电子文档中表明参考资料的跳转链接后,一直作为超链 接的默认设计。谷歌起初只是简单地继承了默认的设计,没有进行任何颠覆。但是,有下划线用户不会 觉得有多满足,但是现在撤消了下划线,看起来确实更加赏心悦目了。起码,由凌乱带来的疲劳感减轻 了许多。
      其实,在2003 年便有学术研究显示,这种简单粗暴的标记方法会损坏用户的阅读体验,但业界仍一直把 下划线作为超链接的默认设置使用。
      下划线存在的时候,更多的是体现技术功能,而现在不在了,更多的是考虑到用户体验。这是很有意义 的改进。就像外媒评论的:Google取消超链接下划线,这是以用户体验为中心的互联网美丽新世界的前 奏。
      这么意义重大的调整,背后有什么推动力呢?我们可以认为是某位工程师很偶然的灵感,但是背后的隐 性推动力,相信已经蓄积很久了,可以猜测这是自然而然的结果。以下两种主要推动力,不应该被忽视 :
      1、用户阅读习惯的改变
      大数据对很多用户来说是一种折磨,因为它给我们的提供了太多的选择。以前信息饥荒的年代,我们总 是希望搜索引擎能够为我们搜刮出更多的信息。但是现在我们对信息的追求,已经不仅仅满足于温饱, 而是更看重质量。我们希望搜索引擎能够直接给出最好的答案,只是要答案而已,其它的任何无关紧要 的东西能少则少,否则它会增加用户的视觉负担。
      下划线其实就是那种可有可无的附带物。可能它不会影响搜索精准度,只是一种展现形式,多了它我们 不会觉得怎么样,我们也习惯了,但是现在把它撤掉了,我们顿感轻松愉悦。它的消失,对搜索结果页 起到了很好的减肥效果,如果现在重新挂上去,用户会觉得信息量好大,不信你可以用百度对比一下。
      在信息泛滥的年代,简约的魅力反而日益凸显。我们的注意力是有限的,浏览网页的时候我们需要聚焦 和层次感,而不是一堆无从入眼的文字。因此,现在你会发现,下划线其实是个多余的东西,甚至具有 消极的干扰作用。
      2、移动互联网的冲击
      移动互联网与PC互联网界面的巨大区别之一,就是超链接不带下划线。而且,不管是现在还是刚起步, 移动端的下划线从来没有受到过用户的欢迎。很多人第一次用手机上传统的网页就觉得下划线是个累赘 ,严重干扰视觉体验。如果跟现在无下划线的移动网页一对比,更是觉得不堪入目。
      乔布斯推动了智能手机革命,智能手机的普及为移动互联网打开了大门。我们现在已经处于移动互联网 普及的时代了,移动端的浏览习惯并定会对传统的PC端习惯造成冲击,继而慢慢实现融合。PC端下划线 的撤出,就是PC与移动接合的一个环节。
      谷歌撤销下划线与移动端加上下划线一样要命,一个是正向的,一个是反向的。即两者都同样具有不一 般的影响力。
      其实这次谷歌的调整并不仅限于下划线,这是全面提升用户体验的一次尝试,只不过下划线的撤销对整 个PC互联网的意义更大。以下几个调整是谷歌针对搜索用户体验的改进:
      1、标题和描述的字体优化
      现在搜索结果页的字体大小、粗细、行距比以前更为赏心悦目,给人更多的空间感,简洁大方(仔细观 察一下就会发现了)。
      2、搜索结果的分类整合
      信息一点你就会发现,谷歌的搜索结果中,对特定的搜索结果进行了分类整合。比如图片、新闻、百科 类等特定平台的内容,它们之间会有一条浅色的分割线。如下图:
      3、谷歌的广告更加光明正大了
      谷歌广告系统一直宣称“不作恶”,看来他们真的付诸行动了。之前的搜索广告与自然结果就明显用不 同背景区别出来了,现在更是在广告旁边明显标上了“广告”的字眼,让人佩服。如下图:
      谷歌的这些改进,确实更加关注以人为本了 .其实做出调整的不仅是Google,最近美国的主流媒体,包 括纽约时报以及时代杂志,纷纷重新设计了自己的站点,都无一例外的都取消了超链接的下划线,调整 字体的风格、大小、行距从而提高用户的阅读体验。
      互联网用户体验真的拉开了美丽新世界的序幕吗?互联网从业人士,你们受到了什么启发呢?


    展开全文
  • python中单下划线和双下划线意义python中单下划线和双下划线意义python中单下划线和双下划线意义 __major__:一种约定,Python内部的名字,用来区别其他用户自定义的命名,以防冲突。 _major:一种约定,用来...

    python线线python中单下划线和双下划线的意义


    前导单下划线

    _major:一种约定,用来指定变量私有。具有前导下划线的类中的名称只是向其他程序员指示该属性或方法是私有的,但是,名称本身并没有什么特别之处.

    具有前导下划线的类中的名称只是向其他程序员指示该属性或方法是私有的。这是一种默认的惯例。不能用from module import *导入,其他方面和公有一样访问。

    这是一种指示内部使用的惯例约定。但是,Python并不会阻止任何人去访问带前导单下划线的属性,它仍可以被外界获取。这个惯例约定同样适用于模块,函数的命名。


    前导双下划线

    __major:这个有真正的意义:解析器用_classname__major来代替这个名字,以区别和其他类相同的命名。

    __double_leading_underscore:在命名一个类属性时,调用名称修改,比如:在类Major中,类属性__boo会变为_Major__boo

    前导双下划线的属性或方法名会改变成其它形式。调用名称修改的目的就是为了继承,为类提供一种简单的方法来定义“私有”实例变量和方法,而不必担心派生类定义的实例变量,或者通过类外部的代码来修改实例变量。


    双向双下划线

    __init__:一种约定,Python内部的名字,用来区别其他用户自定义的命名,以防冲突。

    __double_leading_and_trailing_underscore__:常见于Python内置的“魔术”对象或属性,例如,__init__,__import__或__file__,为了区别于用户自定义的__double_leading_underscore。它们会被Python系统调用的,不用用户自己调用。

    双向双下划线

    一般用于Python自己内置的方法属性。


    示例

    >>> class MyClass():
    ...     def __init__(self):
    ...         self.__superprivate = "Hello"
    ...         self._semiprivate = ", world!"
    ...     def __add__(self, new_str):
    ...         return " ".join([self.__superprivate, new_str])
    ...
    >>> mc = MyClass()
    >>> print(mc.__superprivate)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: myClass instance has no attribute '__superprivate'
    >>> print(mc._semiprivate)
    , world!
    >>> print(mc.__dict__)
    {'_MyClass__superprivate': 'Hello', '_semiprivate': ', world!'}
    >>> print(mc + "xxx")
    Hello xxx
    

    在上面这个例子中,虽然我们认为_semiprivate是私有的,但我们还是可以直接调用,Python并没有真正的支持私有化,前导单下划线的私有性只是一种编程规范

    但是,我们无法直接使用mc.__superprivate,因为类属性__superprivate已经更名为_MyClass__superprivate

    这样的好处是,假象一下,你有一个子类MySubClass,它的私有属性就会重命名为_MySubClass__superprivate,而父类的私有属性就不会被覆盖。去修改子类的私有属性而不会去影响到父类。

    __add__是魔法方法,它是有Python系统自己调用。上例中,我们没有显式地调用它,而是使用运算符mc + "xxx",而其背后,Python就隐式调用了__add__

    Tips: 如果你定义的变量与某个保留关键字冲突,可以使用后置单下划线。

    展开全文
  • 下划线 _s : 保护变量 只有类对象和子类对象自己能访问到这些变量 _foo() : 不能直接访问的类属性 需要通过类提供的接口进行访问 双下划线 __s:私有成员 只能类对象自己能访问,子类对象也不能访问 s:...
  • (1)、以单下划线开头,表示这是一个保护成员,只有类对象和子类对象自己能访问到这些变量。以单下划线开头的变量和函数被默认当作是内部函数,使用from module improt *时不会被获取,但是使用import module可以...
  • #"单下划线"开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量; #"双下划线"开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。 classPub(object): ...
  • python 单下划线/双下划线代表的意义

    千次阅读 2018-07-24 19:09:46
    下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,建议避免用下划线作为变量名的开始。一般来讲,变量名_object被看作是“私有的”,在模块或类外不可以使用,不能用'from moduleimport *'导入。当变量是...
  • 导入__xxx__ 系统定义名字__xxx 类中的私有变量名核心风格:避免用下划线作为变量名的开始因为下划线对解释器有特殊的意义,而且内建的标识符所使用的符号,我们建议程序员避免用下划线作为变量名的开始。...
  • Python中下划线意义

    2019-08-16 14:36:34
    Pattern Example Meaning Single Leading Underscore _var Naming convention indicating a name is meant for internal use. Generally not enforced by the Python interpreter (except in wildcard...
  • Python用下划线 Python用下划线为变量前缀和后缀...因为下划线对解释器有特殊的意义,而且内建的标识符所使用的符号,我们建议程序员避免用下划线作为变量名的开始。一般来讲,变量名_xxx被看做是'私有的',在模...
  • 总结: 变量: 1. 前带_的变量: 标明是一个私有变量, 只用于标明,外部类还是可以访问到这个变量 2. 前带两个_ ,后带两个_ 的变量: 标明是内置...3. 大写加下划线的变量: 标明是不会发生改变的全局变量 函数: 1...
  • golang 下划线(underscore)的意义   2015.11.10 10:50* 字数 172 阅读 4240评论 3喜欢 15赞赏 1 "_"(下划线),可以简单理解为�赋值但以后不再使用,在golang中使用比较多,使用场合不单一,这里稍...
  • 文章目录1 单下划线(_)1.1 在解释器中1.2 作为名称使用2 变量中的下划线2.1 单下划线开头的变量(_XXX)2.2 双下划线开头的变量(__XXX)2.3 双下划线开头和结尾的变量( __ XXX__)3 方法中开头和结尾的双下划线4...
  • 在Golang里,import的作用是导入其他package,但是今天在看beego框架时看到了import 下划线,不知其意,故百度而解之。 import 下划线(如:import _ hello/imp)的作用: 当导入一个包时,该包下的文件里所有init...
  • Python中关于下划线的标识符的意义

    千次阅读 2017-02-16 16:31:30
    以下划线开头的标识符是有特殊意义的。 以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用“from xxx import *”而导入; 以双下划线开头的(__foo)代表类的私有成员; 以双...
  • go import后带“_”下划线意义

    千次阅读 2018-02-02 11:58:22
    在Golang里,import的作用是导入其他package,但是今天在看beego框架时看到了import 下划线,不知其意,故百度而解之。 import 下划线(如:import _ hello/imp)的作用: 当导入一个包时,该包下的文件里所有...
  • 下划线、双下划线、头尾双下划线说明: __foo__: 定义的是特殊方法,一般是系统定义名字 ,类似__init__()之类的。 _foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行...
  • Python常见下划线

    2018-05-05 21:20:00
    python中常见的下划线意义 Python中常常使用下划线里对变量进行修饰,通常作为变量的前缀或者后缀出现,被修饰的变量一般存在特殊的用法: _XXX:不能被from module import _XXX导入,这种情况下的_XXX被称为...
  • 下划线

    千次阅读 2012-10-25 23:48:04
    Python 用下划线作为变量前缀和后缀指定特殊变量 ...因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员避免用下划线作为变量名的开始。一般来讲,变量名_xxx被看作是
  • Scala中是这样定义下划线 _ 的: _ 代表 ‘’任意‘’ 在Scala语言中存在类型推理,就是有的时候你不必指定具体的类型,Scala语言会自动进行推测参数的类型是什么。 比如: var a = "a" 这里Scala会自动...
  • Python 用下划线作为变量前缀和后缀指定特殊变量/方法。 主要存在四种情形 1. 1. object # public 2. __object__ # special, python system use, user should not define like it 3. __object # private (name ...
  •  在Golang里,import的作用是导入其他package,但是今天在看beego框架时看到了import 下划线,不知其意,故百度而解之。 import 下划线(如:import _ hello/imp)的作用: 当导入一个包时,该包下的文件里...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,266
精华内容 906
关键字:

下划线意义