关于Python的前后、单双下划线作用,看完这篇文章吊打面试官!

龙头复盘神器/复盘于导出工具最新版5.6 龙头复盘神器,复盘于导出工具 阅读详情
python的各种下划线

在Python中,可能最常见的就是各种常量、变量、函数、方法前后添加的那些下划线了。有前面加的、后面加的,加一个的,加两个的,看到头晕。那么,你对这些知识都掌握了吗 ?让我们先来做一个自测吧。

题目:说明以下四个例子输出的结果分别是什么。

自测题

各位,请开始你的表演,来看看以上4段代码分别输出的结果是什么?OK,记住你的答案,等看完文章解开谜底后,再来看看的答对了没。

单前导下划线

单前导下划线(_xxx),作为Python的命名约定,表示仅供内部使用。但注意这个命名约定,在类中你使用单前导线声明的变量,依然可以在外部直接访问。那这种命名约定还有什么意义呢?有!当代码使用from modlue import * 导入某个模块时,单前导线这种定义方式的属性,不会被导入。举例:

# demo1.py
Name = "清风"
_Age = 18

# demo2.py
from demo1 import *

print(print(Name,_Age))

#output:
NameError: name '_Age' is not defined

正常的情况是如上结果,但是万事无绝对,面试官的阴人考点来了:

__all__ = ["Name", "_Age"]

当demo1.py在开头声明如上,使用__all__单独声明了可导入内容时,可以正常导入。虽然使用起来矛盾,但是面试阴人必备有木有?

单末尾下划线

单末尾下划线(xxx_),按照PEP8规定,单末尾下划线也是一个约定 用来避免与python关键字产生命名冲突。

例如:我们使用Beautifulsoup进行网页解析,通过类方法定位时,会找某个标签它的存在class=‘xxx’的情况,此时css的class与Python中的类重名,需要在class后添加单下划线进行区分。类似场景还有很多,就不一一列举了。

双前导和双末尾下划线

日常开发中,最好避免在自己的程序中使用以双下划线(“dunders”)开头和结尾的名称,因为它是Python语言定义的一种特殊方法(魔法方法),我们熟知的__init__ 、__dict__ 、__getitem__等等。

但是,如果你非要使用这种写法去声明,那可真是无底坑...如果你声明的变量不是内置的魔法方法,Python会将它当做普通的变量来操作。如果和内置的方法重名,要么重写,要么因为功能冲突而引发报错,所以不作死就不会死,还是别这么玩了。

双前导下划线

这个为什么放在最后,因为压轴啊!双前导下划线,在面试中被考到的几率太大了,尤其是那种长相猥琐,心术不正的面试官,最爱问这个知识点,所以要牢记。

首先双前导下划线(__xxx)的命名,90%情况下是真切的私有变量、方法。剩下10%一会儿再说。下来说说双前导下划线的作用,既然为私有属性,那么仅在当前类中可用,外部、子类均无法调用和继承。知道这点写代码差不多够了,但还差一点,拿文章开头的最后一个例子来说

# Test4
class Root:
    def __func(self):
        print('root')

class Child(Root):
    def __init__(self):
        self.__func()

Child()

大家刚才的答案是什么,root?恭喜你,打错了,结果是:

AttributeError: 'Child' object has no attribute '_Child__func'

不该是子类没有的方法,继承父类么,命名父类有,为什么会报错。刚才我们说到了,双前导下划线是真切的私有变量、方法,无法被子类所继承。如果我们把双前导下划线,变成了单前导下划线(如Test3),那么结果是root。

不能继承的问题明白了,但这个_Child__func是什么鬼?这就要说为什么刚才我说双前导下划线90%的情况下是真切的私有变量了、让我们来看下面的例子:

class Demo:
    def __init__(self):
        self.__name = "清风Python"

    def __say_hello(self):
        print(f"你好:{self.__name}")
        
D = Demo()
# usually
print(D.__name)
D.__say_hello

# specially
print(D._Demo__name)
D._Demo__say_hello()

我们定义一个Demo类,其中存在双前导下划线的__name __say_hello,当我们使用通常的调用方式时,时无法执行的,但Python的私有属性声明时,其实就是将某个私有属性前添加单下划线+类名,所以如果其实不存在什么私有属性,我们可以通过_classname__privatefunc的方式实现强制调用。

那么,日常中我们能否尽量的避免这种方式呢?方法是有的,但是只能骗骗初学者,对有心人还是没用,比如:

class Demo:
    def __init__(self):
        self.__money = 100

    @property
    def money(self):
        return self.__money
    
    @money.setter
    def money(self, pwd):
        pass
    
D = Demo()
D.money = 1000000
print(D.money) # 依旧为100块

python的property装饰器,可以将方法声明为类的属性,当某人调用D.money得到自己余额为100块时,肯定想着我重新赋值余额秒变土豪,但真实的余额我们使用的是私有的self.__money。而通过property创建了一个money的属性,当用户对money赋值时,money.setter的方法是空的,你怎么赋值都是无用的(空的干嘛还要写,因为不写会报错啊...AttributeError: can't set attribute)。

这样看起来很完美啊,为什么说只能骗骗初学者?当你打印print(D.__dict__)时{'_Demo__money': 100}一目了然。

最后,文章开头的测试题答案你做对了么?结果是:

child、root、root、报错

今天关于Python中下划线的内容就到此为止,是否起到了稳固执行的效果呢?如果觉得有所收获,欢迎分享给你的小伙伴们一起进步啊!

The End

期待你关注我的公众号清风Python,如果你觉得不错,希望能动动手指转发给你身边的朋友们。
我的github地址:https://github.com/BreezePython

图像做旧算法原理及代码解释 该图像做旧算法主要通过一系列的图像处理操作来模拟旧照片的效果。整体流程包括:首先对输入图像进行颜色调整,降低饱和度并增加黄色调以营造出旧照片的色彩风格;接着添加高斯噪声来模拟旧照片可能存在的颗粒感;最后通过在图像上随机绘制线条来模拟旧照片的划痕和瑕疵。综上所述,该图像做旧算法通过对颜色的调整(包括饱和度降低、色相偏移)、添加高斯噪声以及模拟划痕和瑕疵等一系列操作,从多个方面模拟了旧照片的特征。 阅读详情

相关推荐

南邮-软件设计实验(C++版)

南邮软件设计 A档 一、分数统计 课题内容:   设计一个分数统计程序。包括学生信息的输入输出以及排序。通过该课题全面熟悉数组、字符串、文件的使用,掌握程序设计的基本方法及友好界面的设计。 课题要求: (1)输入某班级学生的姓名、分数; (2)对(1)的分数进行降幂排列并输出; (3)具有输入输出界面。 示例代码: #include<bits/stdc++.h> using...

Dainelcw 1万+

python下划线键盘怎么输入_小编教你下划线在键盘上怎么打

使用电脑打字是我们的常见操作之一,很多人在编辑文字的时候也需要经常用到一些符号,不过有朋友就反应说不知道下划线在键盘上怎么打。小编今天就跟大家聊聊下划线在键盘上打出来的方法。具体方法如下:1. 键盘输入下划线,首先我们看下键盘一般都有2种,电脑用的大键盘和笔记本小键盘。2.电脑大键盘。大键盘区域找到右上角有个 - 线就是中横线,使用shift+- 即可输入下划线。3.注意下划线输入要在英文输入法...

weixin_39688687的博客 9317

S32DS 3.5.8离线包怎么用?保姆级教程教你手动安装S32K3开发环境(附资源下载)

本文详细介绍了S32DS 3.5.8离线包的安装方法,适用于S32K3开发环境的手动搭建。从资源获取、完整性验证到分步安装指南,提供了全面的离线部署解决方案,特别适合军工/车企内网开发等场景。文章还包含版本选择建议、常见问题排查及团队协作方案,帮助开发者高效完成环境配置。

weixin_30471561的博客 477

python横线怎么打_python下划线怎么打出来

python中下划线使用键盘上的Shift+减号键即可打出,减号键位于0和加号键之间。在Python中下划线还具有 private 和 protected 类似的访问权限作用,下面我们具体分析。Python主要存在四种命名:(1)object#公用方法(2)__object__#内建方法,用户不要这样定义(3)__object#全私有,全保护(private)(4)_obj...

weixin_28947253的博客 3657

WandB本地部署踩坑指南:从Docker启动到License更新的完整流程(附常见错误解决方案)

本文详细介绍了Weights & Biases(WandB)机器学习实验管理平台的本地化部署全流程,涵盖从Docker环境搭建、许可证管理到常见错误排查的实战经验。针对企业级应用场景,文章还提供了性能优化、高可用架构设计及开源替代方案Trackio的评估与迁移策略,为构建安全、可控的内部实验追踪平台提供完整解决方案。

potato的博客 568

了解你的GPU:深入探讨AMD SMI

2024年9月17日 作者:Matt Elliott对于使用AMD硬件的系统管理员和高级用户来说,性能优化和高效的资源监控至关重要。AMD系统管理界面命令行工具`amd-smi`正是为了解决这些需求而设计的。amd-smi是一个多功能的命令行工具,专门用于管理和监控AMD硬件,主要侧重于GPU。作为未来取代`rocm-smi`的工具,`amd-smi`有望成为跨广泛设备的AMD硬件管理的主要工具。

数字人生 4524

Python 下划线的5种含义

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。python中的私有变量和私有方法仍然是可以访问的;

m0_59236602的博客 1472

DDR的Controller、Channel、Chip、Rank、Bank、Row、Column、Sided、Dimm

DDR的Controller、Channel、Chip、Bank、Rank、Row、Column、Sided、Dimm

张飞online博客 2万+

chatgpt赋能python:Python横向输出:如何在Python中横向输出?

横向输出是将数据按横向排列,逐行输出。它与垂直输出相反,后者是将数据垂直排列,逐列输出。Python中的print函数默认情况下,会将数据进行垂直排列,逐列输出。但在某些情况下,例如输出表格数据或将数据输出到文件中,需要将数据横向排列,这就需要使用特定的方法进行处理。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT。

tulingtest的博客 1722

【华为OD机试真题】2、在字符串中找出连续最长的数字串含+-号 | 机试真题+思路参考+代码解析(C++、Java、Py)

题目描述 >请在一个字符串中找出连续最长的数字串,并返回这个数字串。 如果存在长度相同的连续数字串,返回最后一个。 如果没有符合条件的字符串,返回空字符串””。   注意: 数字串可以由数字”0-9″、小数点”.”、正负号”±”组成,长度包括组成数字串的所有符号。 “.”、“±”仅能出现一次,”.”的两边必须是数字,”±”仅能出现在开头且其后必须要有数字。 长度不定,可能含有空格

KJ.JK 6273

极智AI | 谈谈为什么卷积加速更喜欢 NHWC Layout

本文主要讨论一下为什么卷积加速更加喜欢 NHWC 的数据排布。

极智视界 2971

python程序中长下划线怎么打_python中下划线怎么输入

python中下划线使用键盘上的Shift+减号键即可打出,减号键位于0和加号键之间。在Python中下划线还具有 private 和 protected 类似的访问权限作用,下面我们具体分析。Python主要存在四种命名:(1)object#公用方法(2)__object__#内建方法,用户不要这样定义(3)__object#全私有,全保护(private)(4)_obj...

weixin_39761481的博客 3830

保险还在等灾后报案?高精度气象开始提前计算“赔付风险”

【摘要】传统保险理赔模式正在向灾前风险管理转型,保险公司竞争焦点从"赔得快"转向"预判准"。文章提出构建气象保险风险指数(WRI),通过"气象危险度×资产暴露度×标的脆弱性"精准计算损失风险,实现从天气预报向"损失天气"的转变。核心观点包括:1)需关注气象要素的强度、持续时间和空间位置三维度;2)可视化系统应直接显示预期赔付热力图;3)需解决指数保险的基差风险问题,采用多源数据融合技术;4)理想平台需包含风险地图、损失热力图、灾

专注AI大模型,软件混淆,授权 53

关于Python的前后、单双下划线作用,看完这篇文章,吊打面试官!

↑↑↑关注后"星标"简说Python人人都可以简单入门Python、爬虫、数据分析简说Python严选来源:AirPython 作者:星安果Oneoldwat...

简说Python的博客 622

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

python长的横线怎么打_关于Python的前后、单双下划线作用,看完这篇文章,吊打面试官!...

点击上方“AI算法与图像处理”,选择加"星标"或“置顶”重磅干货,第一时间送达来源:清风pythonpython的各种下划线在Python中,可能最常见的就是各种常量、变量、函数、方法前后添加的那些下划线了。有前面加的、后面加的,加一个的,加两个的,看到头晕。那么,你对这些知识都掌握了吗 ?让我们先来做一个自测吧。题目:说明以下四个例子输出的结果分别是什么。自测题各位,请开始你的表演,来看看以上4...

weixin_39986435的博客 2014

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Python双前导和双末尾下划线什么意思?

参考:关于Python的前后、单双下划线作用,看完这篇文章,吊打面试官!-腾讯云开发者社区-腾讯云Python中变量及方法前后下划线的含义_python中前后有双下划线的-优快云博客

qq_34425255的博客 205

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Python中变量及方法前后下划线的含义

参考: python中_、__、xx(单下划线、双下划线等)的含义 Python中的下划线、双下划线单下划线和双下划线在Python变量名和方法名中都有各自的含义。有些仅仅是作为约定,用于提示开发人员;而另一些则对Python解释器有特殊含义。总的来说有一下几种情况:"单下划线 " 开始的成员变量相当于私有变量,也叫做保护变量,意思是只有类实例和子类实例能访问到这些变量,需通过类提供的接口进行访问(可以定义有点像java中的getter、setter方法,借助方法访问,而不是直接对变量动刀子);不能用’fr

sally的jerry 6936

chatgpt赋能python:如何打出Python中的横杠——一个SEO优化指南

本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。

tutan123321的博客 2210

python的类是什么意思_Python 各种下划线都是啥意思_、_xx、xx_、__xx、__xx__、_classname_...

我们在定义一些变量或者方法的时候,常常会用到下划线,在 Python 中,下划线可是很有用处的哟,比如变量,有些是一个下划线开头的(_xx),有些是两个下划线开头的(__xx),有些是在名称的结尾添加下划线的(xx_),还有一些方法我们常常看到两个下划线开头和结尾的(__xx__) 等等…为什么要这么写呢?它们都代表什么意思?我们以后如何定义好这些名称呢?那么接下来就是:学习 Python 的正确...

weixin_39622655的博客 552

python

一、注释 print("哈哈哈") print("你好啊,python") ​ # 单行注释 """ 注释!!这是注释 """ ​ print("python,文字和注释颜色一样。") 二、标准化输出 """ print("标准化输出字符串") ​ a = 10 ​ print("这是变量:", a) ​ ​ """ ​ age = 18 print("我的名字是%s,我的国籍是%s" % ("轩玉", "中国")) print("我的年纪是:%d 岁" % age) ​ # 了解 p.

Xieeenciing的博客 839

python双下划线怎么打

连续按键盘上的“shift+_”键两次即可,不同编辑器可能显示会不太一样。像图1中那样没连起来也是对的,没有语法错误。

hakesashou的博客 608

新手快看,Python下划线的五个作用

初学者看到 Python 中的下划线 _ 时可能会有些懵圈,不知道这个到底是干什么用的,今天就来盘点一下 Python 中间的下划线有哪些用处。以后看到下划线时就可以对号入座了。 1、用在 Python 解释器,表示上一次的执行结果 即使不把 Python 用于编程,也可以把它用作智能计算器,下划线保存上次的计算结果,在计算时相当方便: >>>4+3 7 >>>_ 7 >>>_+2 9 >>>a...

Python_xiaowu的博客 853

Python各种下划线的含义,熟悉又陌生的东西!

点击上方“Python3X”,选择“置顶或者星标”第一时间收到精彩推送!单下划线和双下划线在Python变量和方法名称中都各有其含义。有一些含义仅仅是依照约定,被视作是对...

胖虎 298

python习题:(调用函数)打印横线、计算数的和与平均值

1、写一个打印一条横线的函数。(提示:横线是若干个"-"组成) def printinfo(): print("-----------") 2、写一个函数,可以通过输入的参数,打印出自定义行数的横线。(提示:调用上面的函数) 此处并未使用input()获取用户的数据,仅仅简单的使用函数调用 还有初学者需要注意的是range( i , j )的范围是从 i 到 j - 1。(不清楚可以看前面的文章:python) def printLine(a): for i in range(1,in

bolinmengling的博客 4220

Python 打印横线,三数求和、求平均

课堂练习 1,写一个打印一条横线的函数(横线由若干-组成) 2,写一个函数,可以通过输入的参数,打印出自定义行数的横线(调用上一个函数) 3,写一个函数求三个数字的和 4,写一个函数求三个数的平均值(调用上一个函数) # 打印一条线 def print1(): print("-"*50) # print1() # 根据用户输入的数字,打印多条线 def printNum(num): i = 0 while i < num: print1() i

weixin_44837382的博客 3104
上一篇: 我用Python写了一个成语接龙的游戏,并把它部署到了手机上
下一篇: Python仅用3行代码就能输出花式字符串图集,同事直呼666!
清风Python
博客等级 码龄7年 406粉丝 267原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值