下划线在 Python 中的特殊含义

2023-05-16

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达


Python 中的下划线

下划线在 Python 中是有特殊含义的,它们在 Python 的不同地方使用。

下面是 Python 中使用的不同类型的下划线:

43efbb11538f111c2c8099a1745ad1ea.png


1. 单下划线

076130279bfd392685564dfcf0410f15.png

保存上次执行的表达式的值

使用一个下划线保存 Python 交互式命令提示符中最后执行的表达式的值。我们还可以将值保存到另一个变量。

9629dfbe85bd1ebc90a047af8e474e75.png

在循环中忽略值

在 Python 中使用一个下划线 _ 来忽略某些值。如果我们不想使用某些值,我们可以给将该值赋值给 _ 。

#Single underscore used in for loop
for _ in range(5):
    print ("Python")


'''
Output:
Python
Python
Python
Python
Python
'''


#Iterating through list
colors=["red","blue","green"]
for _ in colors:
    print (_)
'''
Output:
red
blue
green
'''

忽略元组解压缩中的值

如果在元组解压缩时想要忽略某些值,可以将这些值分配给 _。

#tuple unpacking
t=("red","green","blue")
#ignoring value "green" while tuple unpacking
t1,_,t2=t
print (t1)#Output:red
print (t2)#Output:blue




#Ignoring multiple values in tuple unpacking
tt=(1,2,3,4,5,6)
#Ignoring all values except first and last element in tuple.
t3,*_,t4=tt
print (t3)
print (t4)

用于数字分隔符

下划线也可以用作数字的分隔符,用于整数、浮点数和复数等数值中的数字分组。下划线没有语义含义,并且文字被解析,就像没有下划线一样。

#grouping decimal numbers by _
a=10_000_000
print (a)#Output:10000000


2. 单个前缀下划线

可以在变量名、方法名和类名中使用单个前缀下划线。它表示这些带有一个前缀下划线的类、变量和方法名称被程序视为“私有”。如果我们从 from M import * 中指定,那些以单个前缀下划线开头的名称将不会被导入。如果我们想导入这些变量/方法,我们必须在导入时指定名称。

引用 PEP-8:

_single_leading_underline:弱“ internal use” 指示符。例如:from m import * 不导入名称以下划线开头的对象。

#variable name having single leading underscore.
_a="hello"
b="helloworld"


def add(x,y):
    print (x+y)
#function name having single leading underscore
def _sub(x,y):
    print (x-y)


if __name__ == '__main__':
    print (_a)#Output:hello
    add(4,3)#Output:7
    _sub(4,3)#Output:1

将上面提到的 Python 文件 c1.py import 至 c2.py

示例:from c1 import *

只有一个前缀下划线的变量和函数不能被访问。

from c1 import *
#accessing variable names having single leading underscore.
print (_a)#Output:NameError: name '_a' is not defined




#accessing function name havig single leading underscore
print (_sub(7,2))#Output:NameError: name '_sub' is not defined




#accessing variables and functions which is not having single leading underscore.
# we will able to access those varaibles and functions
add(3,4)#Output:7
print (b)#helloworld

如果我们想导入只有一个前缀下划线的变量和函数,那么在导入时必须提到这个变量名。

例如:from c1 import _a,_sub

from c1 import _a,_sub


#accessing variable names having single leading underscore.
print (_a)#Output:hello




#accessing function name having single leading underscore
_sub(7,2)#Output:5

3. 单个后缀下划线

单个后缀下划线用于避免与 Python 关键字冲突。

引用 PEP-8:

约定使用 single_trailing_underline_: 以避免与 Python 关键字冲突

list=[1,2,3]


t=(5,6,7)


#Coverting tuple to list using list() constructor
t1=list(t)
#Output:TypeError: 'list' object is not callable

在上面的示例中,我们可以使用 list_ 作为变量名,以避免与 Python 关键字 list 发生冲突。

list_=[1,2,3]
t=(5,6,7)
#Coverting tuple to list using list() constructor
t1=list(t)
print (t1)#Output:[5, 6, 7]

4. 双下划线

双下划线告诉 Python 解释器重写子类的属性名和方法名,以避免命名冲突。用类扩展名更改属性名称的解释器称为名称改写。

用 self._classname__methodname()代替 self.__methodname(),用

self._classname__attributename 代替 self.__attributename。

根据 Python 文档:

“名称改写有助于让子类重写方法,而不会破坏类内的方法调用。”

引用 PEP-8:

“ __double_leading_underline:当命名一个 class 属性时,调用名称改写(在类 FooBar 中,__boo 变成 _FooBar__boo)”

class Student:
    def __init__(self,name,rollno):
        self.name=name
        self.__rollno=rollno
    def __repr__(self):
        return "{},{}".format(self.name,self.rollno)


s=Student("Karthi",12)


print (s.name)
#Unable to access attributes having leading double underscore.
print (s.__rollno)#Output:AttributeError: 'Student' object has no attribute '__rollno'
#Name Mangling - have to use class extension with variable name
print (s._Student__rollno)#Output: 12

具有相同方法名的继承类:

class A:
    def __getmethod(self):
        print ("Inside Class A")


class B(A):
    def __getmethod(self):
        print ("Inside Class B")


b=B()
#Accessing __getmethod() in Class A using Name Mangling
b._A__getmethod()#Output:Inside Class A
#Accessing __getmethod() in Class B using Name Mangling
b._B__getmethod()#Output:Inside Class B

5. 双前缀双后缀下划线

Python 中的特殊方法以双前缀和双后缀下划线命名。它们在 Python 中被称为 magic methods/dunder methods 方法。

例如:__init__,__str__,__repr__,__len__,这些神奇的方法在 Python 中有特殊的意义,我们可以覆盖它们来改变我们的类的特性。

引用 PEP-8:

__double_leading_and_trailing_underscore__:“ magic”对象或属性,位于用户控制的名称空间中。例如 __init__, __import__ 或 __file__。永远不要发明这样的名称,只能根据记录使用。

根据 Python 约定,避免使用具有双前缀和双后缀下划线的变量名。

我们可以使用 dir()函数来查看类继承的神奇方法。

class Student:
    def __init__(self,name,rollno):
        self.name=name
        self.rollno=rollno
    def __repr__(self):
        return "{},{}".format(self.name,self.rollno)


s=Student("karthi",12)
print (s)#Output:karthi,12


print (dir(Student))
'''
Output:
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_
'''

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

d58131a0f289710a28d24a5cbf8c2434.png

166272c0e9471f417ec947cb3699a756.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

下划线在 Python 中的特殊含义 的相关文章

随机推荐

  • 对象检测和图像分割有什么区别?

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 01 人工智能中的图像预处理 对象检测和图像分割是计算机视觉的两种方法 xff0c 这两种处理手段在人工智能领域内相当常见 xff0c
  • 基于OpenCV的网络实时视频流传输

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 很多小伙伴都不会在家里或者办公室安装网络摄像头或监视摄像头 但是有时 xff0c 大家又希望能够随时随地观看视频直播 大多数人会选择使
  • 英伟达 GPU显卡计算能力查询表

    近期小白因为项目需要开始在电脑上配置深度学习环境 经过一些列的苦难折磨之后 xff0c 电脑环境终于配置好了 xff0c 但是却被我的显卡劝退了 我是用的是算力2 1的显卡 xff0c 环境要求算力3以上的显卡 xff0c 无奈最后只能使用
  • 一文看懂激光雷达

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 来源 xff1a 摘自中信证券 与雷达工作原理类似 xff0c 激光雷达通过测量激光信号的时间差和相位差来确定距离 xff0c 但其最
  • 传统CV和深度学习方法的比较

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 本文转自 xff1a 新机器视觉 摘要 xff1a 深度学习推动了数字图像处理领域的极限 但是 xff0c 这并不是说传统计算机视觉技
  • Opencv实战 | 用摄像头自动化跟踪特定颜色物体

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 本文转自 xff1a 新机器视觉 1 导语 在之前的某个教程里 xff0c 我们探讨了如何控制Pan Tilt Servo设备来安置一
  • 使用OpenCV和TesseractOCR进行车牌检测

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 目录 1 xff09 目的和简介 2 xff09 前言 3 xff09 使用OpenCV和Haar级联进行车牌检测 4 xff09 使
  • GPS(全球定位系统)

    GPS 全球定位系 统 xff0c 是美国国防部为陆 xff0c 海 xff0c 空三军研制的新一代卫星导航定位系统 xff0c 它是以 24 颗人造卫星作为基础 xff0c 全天候地向全球各地用户提供时实的三维定位 三维测速和全球同步时间
  • 单应性矩阵应用-基于特征的图像拼接

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 本文转自 xff1a 深度学习这件小事 前言 前面写了一篇关于单应性矩阵的相关文章 xff0c 结尾说到基于特征的图像拼接跟对象检测中
  • 前沿 | 一文详解自动驾驶激光雷达和摄像头的数据融合方法

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 本文转自 xff1a 计算机视觉联盟 自动驾驶感知模块中传感器融合已经成为了标配 xff0c 只是这里融合的层次有不同 xff0c 可
  • 使用 YOLO 进行目标检测

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 自从世界了解人工智能以来 xff0c 有一个特别的用例已经被讨论了很多 它们是自动驾驶汽车 我们经常在科幻电影中听到 读到甚至看到这些
  • 概述 | 全景图像拼接技术全解析

    点 击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 前言 图像 视频拼接的主要目的是为了解决相机视野 xff08 FOV Field Of View xff09 限制 xff0c 生成
  • 我靠这份无人机完全指南吹了一整年牛!

    对于多数无人机爱好者来说 xff0c 能自己从头开始组装一台无人机 xff0c 之后加入AI算法 xff0c 能够航拍 xff0c 可以进行目标跟踪 xff0c 是每个人心中的梦想 亲自从零开始完成复杂系统 xff0c 这是掌握核心技术的必
  • 奇异值分解(SVD)原理总结

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 前言 奇异值分解 xff08 SVD xff09 在降维 xff0c 数据压缩 xff0c 推荐系统等有广泛的应用 xff0c 任何矩
  • 用Python实现神经网络(附完整代码)!

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 在学习神经网络之前 xff0c 我们需要对神经网络底层先做一个基本的了解 我们将在本节介绍感知机 反向传播算法以及多种梯度下降法以给大
  • 一文图解卡尔曼滤波(Kalman Filter)

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 译者注 xff1a 这恐怕是全网有关卡尔曼滤波最简单易懂的解释 xff0c 如果你认真的读完本文 xff0c 你将对卡尔曼滤波有一个更
  • 计算机视觉方法概述

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 一 资源简介 今天给大家推荐一份最新的计算机视觉方法概述 xff0c 这份综述详细的讲述了当前计算机视觉领域中各种机器学习 xff0c
  • 通俗易懂的YOLO系列(从V1到V5)模型解读!

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 0 前言 本文目的是用尽量浅显易懂的语言让零基础小白能够理解什么是YOLO系列模型 xff0c 以及他们的设计思想和改进思路分别是什么
  • PWM电流源型逆变器

    nbsp nbsp nbsp nbsp 随着科学技术和生产力的发展 各种结构型式和各种控制方法的逆变器相继问世 而就逆变器而言 不管输出要求恒频恒压还是变频变压 有效消除或降低输出谐波是基本要求 因而逆变电源的谐波抑制一直是研究者致力于解决
  • 下划线在 Python 中的特殊含义

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 Python 中的下划线 下划线在 Python 中是有特殊含义的 xff0c 它们在 Python 的不同地方使用 下面是 Pyth