下划线(_)在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教程项目,还可以跟老司机交流讨教!

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

python语言下划线怎么打_初学Python语言者必须理解的下划线相关推荐

  1. 采用python语言实现猜数游戏_用python实现猜数游戏

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 本文实例为大家分享了python实现猜数游戏的具体代码,供大家参考,具体内容如下 ...

  2. python得安什么安装包_初学 Python 需要安装哪些软件?

    初学Python,其实是没必要用那么复杂又强大的工具的. 教你一键搭建最好用的交互式编程工具 pip install jupyter 然后怎么运行呢 jupyter notebook ... 对,没有 ...

  3. python语言的记事本在哪_入门Python语言记事本03

    本文主要向大家介绍了入门Python语言记事本03,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断.比如,输入用户年龄, ...

  4. python语言的变量特点随时_【Python】Python语言特点

    Python语言强调简洁直观.可读性强,常被称为"可执行的伪代码". 一.一切都是对象 Python是面向对象的编程语言,数.字符串.数据容器.函数.类.模块(函数)等都是对象.每 ...

  5. python语言的运行效率高吗_为什么Python效率这么低,还这么火?

    这是一个引战的话题,不过我还是想说几句. 任何一个讨论语言效率问题的人,请先问下有没有搞清楚什么是效率? 软件工程发展至今,大型系统基本不可能通过一种语言去架构,c语言到是效率高来着?能去写一个web ...

  6. 用python语言实现喇叭发声原理_用Python实现喇叭天线设计小工具(三)

    摘要:本节主要介绍波导查值模块,以及HFSS调用模块的编写. 波导查值模块 该部分要实现的功能主要是根据输入的工作频率,自动选择合适的标准波导尺寸,免去翻资料的麻烦,实现起来逻辑很简单,也就是单纯地根 ...

  7. python语言的核心理念是_学习Python语言四大核心优势

    1.行业前景好 全球前四大流行语言之一,根据TIOBE最新排名 ,Python已超越C#,与Java,C,C++一起成为全球前4大最流行语言.且,国内目前百度指数搜索量已经超越Java,与C++,即将 ...

  8. python语言编写的modbus协议_基于Python的ModbusTCP客户端实现

    Modbus协议是由Modicon公司(现在的施耐德电气Schneider Electric)推出,主要建立在物理串口.以太网TCP/IP层之上,目前已经成为工业领域通信协议的业界标准,广泛应用在工业 ...

  9. 用python语言实现喇叭发声原理_用Python实现喇叭天线设计小工具(一)

    前言 作为系列文章的第一篇,本文主要介绍采用Python编写一个图形化界面的小程序,方便快速根据波束宽度设计出最优化喇叭天线,一键调用HFSS进行仿真,并可打包为exe文件方便其他人使用,其效果如下: ...

最新文章

  1. python使用openpyxl读取数据_Python-openpyxl读取和写入数据1
  2. redis windows版本的使用
  3. 略谈新时尚风之网上购物领域
  4. 工资表 车辆工程 冯大昕
  5. Apk打包-签名过程
  6. java 反射(Reflection) 详解
  7. 用ASP.NET Core 2.1 建立规范的 REST API -- 缓存和并发
  8. python 工资管理软件_智慧职教云课堂2020Python程序设计(深圳信息职业技术学院)题目答案...
  9. jquery每次动态加载dom,绑定事件会多一次,
  10. jpg图片使用pil的resize后_刚毕业,求解“pdf转换为jpg”的操作教程
  11. android 焦点动画,在一个视图/imageview上获得焦点时,实现android缩放动画?_animation_开发99编程知识库...
  12. OSPF区域外路由的计算过程与FA值实验
  13. Unity加载模块深度解析(网格篇)
  14. Go语言中的单引号、双引号、反引号
  15. 二分查找递归、非递归实现(Python)
  16. Virtualbox 修改硬盘的序列号等信息 例
  17. 广西大学计算机科学与技术调剂,广西大学计算机与电子信息学院2021年硕士研究生招生考试复试成绩公示(调剂)...
  18. VBS好玩的整人小程序
  19. android 双屏 音频输出,一种Android系统双屏异显的两路音频实现方法与流程
  20. pcb天线和纯铜天线_PCB天线是什么

热门文章

  1. 有效缓解失眠的方法,告诉你这些助眠好物
  2. python 时间转换
  3. linux 字符串时间转换,Linux C/C++时间字符串与time_t之间的转换方法(转)
  4. OpenCV+Python实现将车牌数字分割为单个的字符图片
  5. 令人振奋的新闻 HP首超IBM成全球最大IT公司
  6. 【Oracle 数据库】奶妈式教程 day07 内连接
  7. C++ switch用法
  8. 微信公众号标题栏设置青协招新报名专栏
  9. twisted网络框架
  10. Swift 中 let 和 var 区别