zoukankan      html  css  js  c++  java
  • 初学Python语言者必须理解的下划线

     

    本书各大电商平台有售

    下划线(_)在Python语言中有特殊作用。

    在大多数编程语言中,下划线是命名变量或者函数名称时的连字符,但是,在Python语言中,不仅如此。如果你是一名Python程序员,对于诸如 _ in range(10) , __init__(self) 之类的下发肯定熟知。

    本文将详述下划线(_)的使用方法,帮助初学者理解它。

    在Python语言中,下划线主要应用在如下5个方面:

    • 在交互模式中,保存最近一个表达式的值
    • 忽略某个值(“我不重要”)
    • 给变量或者函数名称赋予特殊含义
    • 作为国际化或本地化的函数命名
    • 在数字组成的值中作为分隔符
      注意:不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心,如果你缺新项目练习或者没有python精讲教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,里面很多新python教程项目,还可以跟老司机交流讨教!

    下面逐一阐述。

    用在交互模式中

    在Python交互模式总,如果调用_,会显示最近的表达式的值。这个功能在标准的交互模式中都有,你也可以在其它Python交互式解析器中使用。

    >>> 10 
    10 
    >>> _ 
    10 
    >>> _ * 3 
    30 
    >>> _ * 20 
    600
    复制代码

    表示忽略某个值

    下划线也可以用于表示要忽略某个值。如果你不需要某个值或者该值没什么用,可以用下划线作为相应的变量。

    # Ignore a value when unpacking
    x, _, y = (1, 2, 3) 
    # x = 1, y = 3 
    
    # Ignore the multiple values. It is called "Extended Unpacking" which is available in only Python 3.x
    x, *_, y = (1, 2, 3, 4, 5) 
    # x = 1, y = 5  
    
    # Ignore the index
    for _ in range(10):     
        do_something()  
        
    # Ignore a value of specific location
    for _, val in list_of_tuple:
        do_something()
    复制代码

    给变量或者函数名称赋予特殊含义

    下划线,最多的用途还是在命名中,PEP8是Python开发的公约,它约定了4中命名方式。

    单下划线开始

    以单下划线开始的变量、函数、方法、类名称,意在声明该对象私有化,按照此预订,使用from module import *则无法将相应对象导入。

    然而,Python并不支持真正的私有化,所以我们不能强制某对象私有化,从其他模块中也能直接调用它,有时候,我们会说这种私有化的对象是“内部使用的弱指示器”。

    _internal_name = 'one_nodule' # private variable
    
    _internal_version = '1.0' # private variable
    
    class _Base: # private class
        _hidden_factor = 2 # private variable    
        def __init__(self, price):
            self._price = price    
        def _double_price(self): # private method
            return self._price * self._hidden_factor    
        def get_double_price(self):
            return self._double_price() 
    复制代码

    单下划线结尾

    为了避免与Python关键词和其他内置对象名称冲突,常常用这种命名方式,你可以不用它。

    Tkinter.Toplevel(master, class_='ClassName') # Avoid conflict with 'class' keyword
    
    list_ = List.objects.get(1) # Avoid conflict with 'list' built-in type
    复制代码

    双下划线开始

    这个超越一般约定的语法。当程序运行的时候,Python解析器会对以双下划开始的类中的属性、方法名称重命名,从而避免不同的类中同样名称之间的冲突,基本规则是在双下划线开始的名称前面增加形如“_ClassName”样式的前缀。

    例如在类中有名为__method的方法,这个名字会被更名为_ClassName__method形式。

    class A:
        def _single_method(self):
            pass    
        def __double_method(self): # for mangling
            passclass B(A):
        def __double_method(self): # for mangling
            pass
    复制代码

    如上面所述,以双下划线为开始命名的属性和方法,我们不能用ClassName.__method方式调用,因此,有人把这作为真正的私有化,但是,这里不推荐这种私有化方式,依据就是Python的命名规则。

    译者注: 此处作者的观点,仅供参考。_namne这种方式私有化,是约定的私有化,不是真正的私有化;__name这种方式真正实现了“私有化”,但在编程中是否采用,有不同的观点。或者说对于“私有化”,在Python中是有不同理解的。

    双下划线开始和结尾

    这种约定用于特殊的变量或者方法——称为“魔法方法”(译者想:“magic method”,是不是翻译成“魔幻方法”更好呢?这些特殊方法本来就让学习者感到很“魔幻”。),比如__init____len__。这些方法提供了一些特殊的功能,比如__file__声明本地的Python文件,__eq__实现了表达式a == b

    一般的开发者,很少定义这些方法,但是,在定义类的时候__init__常常在实例化是被执行。

    class A:
        def __init__(self, a): # use special method '__init__' for initializing
            self.a = a    
        def __custom__(self): # custom special method. you might almost do not use it
            pass
    复制代码

    作为国际化或本地化函数命名

    这仅仅是一个约定,不是函数中的语法。因此,下划线并不意味着国际化(i18n)或本地化(l10n),仅仅是因为这种习惯来自C语言中的习惯。

    内置标准库的模块gettext,可以用于演示i18n/l10n。Python中的web开发框架Django也支持i18n/l10n,并应用此约定。

    # see official docs : https://docs.python.org/3/library/gettext.html
    import gettext
    
    gettext.bindtextdomain('myapplication','/path/to/my/language/directory')
    gettext.textdomain('myapplication')
    _ = gettext.gettext
    
    # ...
    
    print(_('This is a translatable string.'))
    复制代码

    数字之间的分隔符

    这个功能是在Python3.6中加入的,用下划线作为数字的分隔符。

    dec_base = 1_000_000
    bin_base = 0b_1111_0000
    hex_base = 0x_1234_abcdprint(dec_base) # 1000000
    print(bin_base) # 240
    print(hex_base) # 305441741
    复制代码

    结论

    本文总结了Python中下换线的使用方法,有的方法或许对你是比较新鲜的,比如i18n/l10n,此前我就不知道。另外要注意:不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心,如果你缺新项目练习或者没有python精讲教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,里面很多新python教程项目,还可以跟老司机交流讨教!

    本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

  • 相关阅读:
    每周总结8
    每周总结7
    每周总结6
    每周总结5
    每周总结4
    每周总结3
    每周总结2
    每周总结1
    Vue实例: 点击循环列表里的某行,改变该行的样式。默认第一行
    vue进阶面试题
  • 原文地址:https://www.cnblogs.com/chengxuyuanaa/p/12698710.html
Copyright © 2011-2022 走看看