网站首页 > 知识剖析 正文
前言
在Python中,下划线(_)是特殊的。如果您是python程序员,对于for _ in range(10),以及__init__(self)的语法可能比较熟悉。
这篇文章将解释什么时候以及如何使用下划线(_),并帮助你理解它。
在Python中有5种使用下划线的情况:?
- 用于在解释器中存储最后一个表达式的值。
- 忽略特定的值。
- 给变量名或函数名赋予特殊的意义和功能。
- 用作“国际化(i18n)”或“本地化(l10n)”。
- 将数字文字值的数字分开。
在解释器中使用时
python解释器将最后一个表达式值存储到名为' _ '的特殊变量中。这个特性首先在标准的CPython解释器中使用,您也可以在其他Python解释器中使用它。
>>> 10
10
>>> _
10
>>> _ * 3
30
>>> _ * 20
600
忽略特定的值
下划线还用于忽略特定的值。如果不需要特定的值,或者不使用这些值,只需将这些值赋给下划线即可。
下划线还用于忽略特定的值。如果不需要特定的值,或者不使用这些值,只需将这些值赋给下划线即可。
赋予变量和函数名称特殊的含义
下划线可能最常用于“命名”。PEP8是Python的约定准则,它介绍了以下4种命名情况:
_single_leading_underscore (首部单下划线)
此约定用于声明模块中的私有变量、函数、方法和类。在
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()
single_trailing_underscore_ (尾部单下滑线)
?此约定可用于避免与Python关键字或内置项发生冲突。你可能不经常使用它。
Tkinter.Toplevel(master, class_='ClassName') # Avoid conflict with 'class' keyword
list_ = List.objects.get(1) # Avoid conflict with 'list' built-in type
__double_leading_underscore (首部双下划线)
这是语法而不是约定的。双下划线将”矫正“类的属性名,以避免类之间的属性名冲突。(所谓的“矫正”是指编译器或解释器用一些规则修改变量或函数名,而不是按原样使用)
Python的矫正规则是在属性名前面加上双下划线声明“_ClassName”。也就是说,如果你在一个类中编写了一个名为“__method”的方法,那么这个名字将会在“_classname__method”的表单中被矫正。
class A:
def _single_method(self):
pass
def __double_method(self): # for mangling
pass
class B(A):
def __double_method(self): # for mangling
pass
因为用双下划线命名的属性会像上面那样矫正,所以我们不能用“ClassName.__method”访问它。有时,有些人使用它就像真正的私人使用这些功能,但它不是私人的,也不推荐这样做。?
__double_leading_and_trailing_underscore__ (首尾部双下划线)
这个约定用于特殊的变量或方法(所谓的“魔法方法”),如:__init__, __len__。这些方法提供了特殊的语法特征或做了特殊的事情。例如,__file__表示Python文件的位置,当a==b表达式被执行时,__eq__被执行。
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)功能
它只是约定,没有任何语法功能。也就是说,下划线并不意味着i18n/l10n,它只是将i18n/l10n绑定到下划线变量,这个约定来自C语言约定。用于i18n/l10n的内置库gettext使用了这种约定,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.'))
将数字值分开
这个特性是在Python 3.6中添加的。它用于使用下划线来分隔数字,以提高可读性:
dec_base = 1_000_000
bin_base = 0b_1111_0000
hex_base = 0x_1234_abcd
print(dec_base) # 1000000
print(bin_base) # 240
print(hex_base) # 305441741
参考
https://medium.com/hackernoon/understanding-the-underscore-of-python-309d1a029edc
- 上一篇: CSS3定位与字体
- 下一篇: 在Django中使用Markdown
猜你喜欢
- 2024-11-24 第4天 | 16天搞定前端,html文本格式,奇葩说?
- 2024-11-24 使用 Tailwind CSS 和 Flowbite 构建的开源 WYSIWYG 富文本编辑器组件
- 2024-11-24 如何用css3实现惊艳面试官的背景动画(高级附源码)?
- 2024-11-24 快速掌握CSS三大特性
- 2024-11-24 第六次记录,利用CSS调整样式位置
- 2024-11-24 Web前端开发-CSS入门干货01
- 2024-11-24 html开发笔记06- 字体标签和文字标签
- 2024-11-24 html 冷门标签
- 2024-11-24 HTML文本及图像和锚基础
- 2024-11-24 Python | 必须理解的下划线
- 05-30mysql 之json字段详解(多层复杂检索)
- 05-30SQL注入基础
- 05-30MySQL新手必看!15个高频SQL语句,让你从菜鸟变大神!
- 05-30MySQL 避坑指南之隐式数据类型转换
- 05-30MySQL进阶系列:SQL执行计划分析及执行方式
- 05-30java 培训 MySQL 一次性插入多行数据的操作
- 05-30数据库迁移有什么技巧?|分享强大的database迁移和同步工具
- 05-30全网最硬核操作:10亿数据如何最快插入MySQL?
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)