python横线怎么打_Python中的各种下划线
Python中有各种各样的下划线变量与函数,看了很多博客和讲解,但是感觉还是很乱。尤其是有人拿C++中的私有变量一说来解释Python下划线是完全错误的。Python中不存在私有变量(这里的私有变量指不可直接用成员符.来访问),实际上Python中不同位置的下划线有不同的意义。现参照一些自己看过的博客、讲解归纳总结一下:单个下划线用作接收无用变量
例1:
a, _, _ = 1,2,3
print(a)
例2:
for _, val in enumerate(range(4)):
print(val)
2.单(多)个下划线作为模块内的变量(函数、类)名
如果我们在一个模块内定义了下划线开头(无论多少下划线)的变量、函数或类的话,当在别的文件中使用from module import *时,这些下划线变量不会被引用到文件内。
当然事情不是绝对的,以下几种情况还是可以把下划线变量import进来的:使用import module,此时还是可以使用module._name使用下划线变量
使用from module import _name,当然可以了 ^o^
还有一种情况,当module中定义了__all__的话,且__all__中定义了下划线变量,则还是会import进来。(__all__是个魔法属性,它是个用户可以定义的列表,可以在文件中定义它来控制import时引入的变量)
3.类内的下划线开头的变量(函数)名
具体来说分为两种:类内单下划线开头的变量名(包括类变量与实例变量)
类内双下划线开头的变量(函数)名
首先说单下划线:
单下划线变量在没有使用@property 修饰符时,它与一般不带下划线的变量没有任何区别,你可以随意的使用成员运算符.来引用或对它赋值。
当使用@property修饰符修饰后,它将会让人看起来“私有”(本质还是可以被引用和赋值的)。看个例子:
在没有使用@property(一般情况下)时:
class Student():
_school = 'xxxUniversity'
def __init__(self, id):
self._id = id
richard = Student(123)
print(richard._id)
print(richard._school)
结果输出:
123
xxxUniversity
是的,加个下划线就仅仅是为了让它看起来不一样而已。实质跟普通变量没任何区别。
但是如果我们使用了property修饰符的话:
class Student():
_school = 'xxxUniversity'
def __init__(self, id):
self._id = id
@property
def id(self):
print('get id')
return self._id
@id.setter
def id(self, new_id):
print('set id')
if new_id < 0:
pass
else:
self._id = new_id
richard = Student(123)
print(richard._id)
richard.id = 100
print(richard.id)
richard._id = 200
print(richard._id)
结果是:
123
set id
get id
100
200
可以发现,如果使用@property修饰,那么我们在给变量赋值时会调用property内的函数来进行引用和赋值。这可以很方便的让我们在接收数据时做一些“预处理”的工作。
但是它并不是私有,我们还是可以用obj._name的形式来访问到它。这时将绕开property函数。
具体property函数的讲解,可以参照:Python @propertywww.programiz.com
接下来是说双下划线开头的类内变量与函数:
这部分参考 @权循真 的回答:双下划线开头的命名形式在 Python 的类成员中使用表示名字改编 (Name Mangling),即如果有一 Test 类里有一成员 __x,那么 dir(Test) 时会看到 _Test__x 而非 __x。这是为了避免该成员的名称与子类中的名称冲突。但要注意这要求该名称末尾没有下划线。
作者:权循真
链接:https://www.zhihu.com/question/19754941/answer/12860775
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
4. 魔法方法与魔法属性
像类内的_init__,__new_函数
迭代器中的__iter_, __next__函数
用于自省的__dict_, __class__等变量
包括刚刚提到的__all__
等等。
这些双下划线开头、双下划线结尾的变量或函数在python解释器中有特定的处理方式和机理。除非你知道你在做什么否则不要重写他们。
我是在参考了以下的文章后总结的:Python 的类的下划线命名有什么不同?www.zhihu.com详解Python中的下划线 - Python - 伯乐在线python.jobbole.com
python横线怎么打_Python中的各种下划线相关推荐
- python怎么打出长下划线_Python 中的各种下划线操作你了解吗?
原标题:Python 中的各种下划线操作你了解吗? 我们在定义一些变量或者方法的时候,常常会用到下划线.在 Python 中,下划线的出镜率非常高,比如变量,有些是一个下划线开头的(_xx),有些是两 ...
- python中的单下划线和双下划线_python中的单下划线和双下划线
1. _ 的含义在python的类中,没有真正的私有化,不管是方法还是属性,为了编程的需要,约定加了下划线 _ 的属性和方法不属于API,不应该在类的外面访问,也不会被from M import * ...
- Python 中5种下划线的含义都是什么?
今天给大家科普一波,单下划线和双下划线在Python变量和方法名称的含义.有一些含义仅仅是依照约定,被视作提示,而有一些含义是由Python解释器严格执行的.在Python变量和方法名称中各种单下划线 ...
- python算法和数据结构_Python中的数据结构和算法
python算法和数据结构 To 至 Leonardo da Vinci 达芬奇(Leonardo da Vinci) 介绍 (Introduction) The purpose of this ar ...
- python中标识符下划线用作开头_python python中那些双下划线开头的那些函数都是干啥用用的...
1.写在前面 今天遇到了__slots__,,所以我就想了解下python中那些双下划线开头的那些函数都是干啥用用的,翻到了下面这篇博客,看着很全面,我只了解其中的一部分,还不敢乱下定义. 其实如果足 ...
- python首行缩进_python中缩进
初识Python 初识Python 跟学习所有的编程语言一样,首先得了解这门语言的编程风格和最基础的语法.下面就让我们一起来了解一下Python的编程风格. 1.逻辑行与物理行 在Python中有逻辑 ...
- python属性名以两个下划线开头_python python中那些双下划线开头的那些函数都是干啥用用的...
1.写在前面 今天遇到了__slots__,,所以我就想了解下python中那些双下划线开头的那些函数都是干啥用用的,翻到了下面这篇博客,看着很全面,我只了解其中的一部分,还不敢乱下定义. 其实如果足 ...
- python类实例化 输入参数名字 下划线_Python 的类的下划线命名有什么不同?
1,以一个下划线开头的命名 ,如_getFile 2,以两个下划线开头的命名 ,如__filename 3,以两个下划线开头和结尾的命名,如 __init__() 4,其它 这些命名有什么不同吗 首先 ...
- python 下划线转驼峰_json字符串中key值下划线命名转换为驼峰命名
json字符串中key值下划线命名转换为驼峰命名: 例如: 原json串: String json= "{'user_name':'ok','user_sex':0,'object_info ...
最新文章
- 进击的python【第一集】
- 【转】Powerdesigner逆向工程从sql server数据库生成pdm
- call()、apply()、bind()
- mysql grant查看用户权限命令
- maven 国内私服
- 5G第一个演进版本标准完成 3GPP宣布R16标准冻结
- android图片传输三方框架,Android开发三种第三方图片加载的框架
- [转]enable spice html5 console access in openstack kilo(centos)
- 一、CXF WebService准备工作
- U8系统UFO报表无法打印
- HCIA-RS(2019最新题库)
- 电阻电容串联并联关系,一辈子受益
- [福大软工] Z班——Beta现场答辩反馈
- Linux delete folder
- easyExcel下载Excel
- css3中3D变换的景深和灭点
- layui教程(一) form 表单的提交问题
- Accessing value from uninitialized register 52,fastJson的坑
- U盘安装kali linux
- 一次诡异的线上数据库的死锁问题排查过程
热门文章
- “华为杯”研究生数学建模竞赛2020年-【华为杯】B题:汽油辛烷值优化建模(附优秀论文)
- 旅游网后台管理系统(一)环境搭建
- matlab终止运行按什么,matlab终止运行命令
- office、Excel、PPT学习笔记
- 如何更改word修改时间
- android studio菜单自动弹出,Android实现微博菜单弹出效果
- TIDB架构自我总结
- 页面手写签名插件 jSignature.min.js 使用实例
- python GUI 显示图片与文字
- $1.2	宏观经济形势