Python中命名规范之三 duner方法和魔法函数
off999 2024-11-01 12:48 39 浏览 0 评论
Python中命名中的尾部双下划线
当想要使用与 Python 关键字或内置名称冲突的名称时, 添加尾部下划线将帮助您避免此问题。
>>> list = [1, 2, 3, 4]
>>> list
[1, 2, 3, 4]>>> list("Pythonista")
Traceback (most recent call last):该名称是为内置类型保留的。如果继续使用相同的交互式会话,则在收到如下错误时会感到惊讶:list
TypeError: 'list' object is not callablelist 该名称是为内置类型保留的。 为什么不能调用 list() 构造函数?j是因为之前的代码覆盖了内置名称,
可以通过在冲突后附加下划线来解决命名冲突的问题
list_是程序员自己定义的名字,直接使用list会覆盖内置的list,可以使用list_来代表息的命名
>>> list_ = [1, 2, 3, 4]
>>> list_
[1, 2, 3, 4]
>>> list("Pythonista")
['P', 'y', 't', 'h', 'o', 'n', 'i', 's', 't', 'a']同样的代理class也是python中的关键字,但是你需要取一个名字来表示这个含义
class Passenger:
def __init__(self, name, class_, seat):
self.name = name
self.class_ = class_
self.seat = seat
# Implementation...可以在class后面加下划线 class_表示这是一个class类型
Python 中的 Dunder 名称
dunderj是什么:
Python中有关单个和双下划线的各种含义和命名约定,名称修饰的工作方式以及它如何影响Python类。dunder 是 double under score 的缩写
这些dunder其实就是魔法方法
例如:list.__len__(),可以通过以下两种方法来获取list的长度
>>> [].__len__()
0
>>>len([])特殊方法 | 描述 |
.__init__() | 在 Python 类中提供初始值设定项 |
.__call__() | 使类的实例调用 |
.__str__() 和 .__repr__() | 为对象提供字符串表示形式 |
.__iter__() 和 .__next__() | 支持迭代器 |
.__len__() | 支持en() |
看一个自定义的魔法方法
class ShoppingCart:
def __init__(self):
self.products = []
def add_product(self, product):
self.products.append(product)
def get_products(self):
return self.products
def __len__(self):
return len(self.products)这个类自己实现了 __len__,这样可以通过len(obj)来获取它的长度。
>>> from cart import ShoppingCart
>>> cart = ShoppingCart()
>>> cart.add_product("keyboard")
>>> cart.add_product("mouse")
>>> cart.add_product("monitor")
>>> len(cart)
3dunder属性
Python 也有一些 dunder 属性,它们不是指特殊方法,而是指特殊属性和变量。以下是最常用的:
- __name__ 导入系统中唯一标识模块。
- __file__ 指示从中加载模块的文件的路径。
大家可以增看一下这个代码中的输出,分析一下为什么会有 __name__和__file__这两个属性,以及它们的值是多少
def main():
# Implemention...
if __name__ == "__main__":
main()Python 中下划线的其他用法
单独一个下划线 _
在 REPL 会话的上下文中,下划线字符具有隐式角色。它作为一个特殊变量,包含上次计算表达式的结果
>>> 12 + 30
42
>>> _
42
>>> pow(4, 2)
16
>>> _
16Python 在计算后自动将该值分配给变量。可以像使用任何其他变量一样访问和使用该变量:__
>>> numbers = [1, 2, 3, 4]
>>> len(numbers)
4
>>> sum(numbers) / _
2.5一次性变量 _
一次性变量是 Python 名称中下划线的另一个常见用例。你经常会在循环和推导中看到它们,在这些循环和推导式中,你不需要在任何计算中使用循环变量。
for循环的语法需要一个变量,但是你其实并不需要这个range中的值,则可以使用_来代替
>>> matrix = [[number for number in range(5)] for _ in range(5)]
>>> matrix
[
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4]
]模式匹配
Python 在 3.10 版中引入了结构模式匹配
>>> def sum_list(numbers):
... match numbers:
... case []:
... return 0
... case [int(first) | float(first), *rest]:
... return first + sum_list(rest)
... case _:
... raise ValueError(f"can only sum lists of numbers")
...最后一条语句使用通配符,如果不是包含整数和浮点数的列表,则匹配。您可以实际尝试一下:case_numbers
>>> sum_list([1, 2, 3])
6
>>> sum_list(["x", "y"])
Traceback (most recent call last):
...
ValueError: can only sum lists of numbersnameedtuple命名元组
之前有文章写过个专题回顾一下
>>> from collections import namedtuple
>>> Point = namedtuple("Point", "x y")
>>> point = Point(2, 4)
>>> point
Point(x=2, y=4)
>>> dir(point)
[
...
'_asdict',
'_field_defaults',
'_fields',
'_make',
'_replace',
'count',
'index',
'x',
'y'
]除了命名元组继承自元组的 和 方法之外,命名元组还提供三种附加方法,它们还有两个额外的属性,以及 ..count().index()._asdict()._make()._replace()._field_defaults._fields
>>> from collections import namedtuple
>>> Car = namedtuple("Car", ["make", "model", "color", "year"])
>>> mustang = Car(make="Ford", model="Mustang", color="Red", year=2022)
>>> mustang.make
'Ford'总结
python中的下划线矸不同的场景有不同的用法,由于这个语言其实没有严格的public和private区别,只能通过下划线这个命名规范来约束,实际上你仍然有办法通过特殊手段获取这些看起来要隐藏的值,当然通常情况下是不建议这样强行使用,虽然它并不能标上你这样做。
相关推荐
- 实时变声器(实时变声器下载)
-
有不少安卓免费变声器软件推荐MorphVOXPro中文版。这是一款非常有趣的语音变声器软件,程序的主要功能可以帮助你在上网用QQ、YY、Skype网络电话或者其他聊天工具进行语音聊天时随心所欲的变换...
- 汉语大词典电子版(汉语大词典电子版pdf)
-
《汉语大字典》是当今世界上规模最大、收集汉字单字最多、释义最全的一部汉语字典。全书约2000万字,共收单字56000多个,几乎包括了各种古今文献和图书资料中出现的所有汉字,可以说是汉语字典的集大成者...
- 免费照片处理软件app(免费照片处理软件哪个最好)
-
首先打开Photoshop,导入一张照片点击打开打开照片之后,同时按ctrl+j复制一个图层在菜单栏里面选择“滤镜”——“锐化”——“智能锐化”适当将锐化的半径调高一些,勾选“更加精确”锐化后放大图片...
- 免费的ps电脑软件(免费的ps电脑软件有哪些)
-
.任何一个版本都不是免费的,但基本所有版本都有破解版或者绿色版,可以去360软件管家里面下载或者电脑管家里也有,最新版的是PSCC版。photoshop是adobe公司旗下的产品,正确来说,购买正...
- 照片恢复(照片恢复免费版下载)
-
方法/步骤 1.首先下载一个数据恢复软件。 2.安装到电脑上,然后把手机和电脑连接起来。 3.接着我们用下载好的数据恢复软件扫描手机。 4.然后找出要恢复的文件照片。 5.在电脑上选在一个磁...
- tiktok官方网站入口(tiktok官方网站入口免费)
-
入口就是TikTok商店卖家。具体步骤如下:为了加入TikTok商店,您首先需要一个TikTok帐户。一旦您拥有TikTok帐户并且超过了符合条件的年龄,就可以使用它注册为TikTok商店卖家。卖家...
- adobe flash player播放器(adobe flash player viewer)
-
不同操作系统不同浏览器,开启Adobeflashplayer的方法各有不同。开启的前提当然是正确安装喽,不同操作系统不同浏览器安装Adobeflashplayer方法也是各不相同的。Wind...
- 央视cctv5体育直播(央视cctv5体育直播在线观看免费)
-
现在全国每家都有机顶盒,在机顶盒上就可以看CCTV所有频道。也可以用手机浏览器搜索CCTV5体育频道。还有就是可以手机上下载安装央视影音APP,央视频APP都可以看。中央电视台体育频道(频道呼号:CC...
-
- 直播平台app下载大全(直播平台app下载大全免费)
-
专门观看淘宝直播的APP是点淘,这款APP是这段时间才出的,我下载了一个,但是我下载这款APP不是为了买东西当时也是看广告连接才点进去的,它这上面是可以赚一些零花钱,我下载之后他给了我七块钱,然后现在每天弄不弄也能弄个一块钱左右。但是里边的...
-
2026-01-19 01:15 off999
- 网络播放器app(网络播放器怎么连接电视机)
-
牛片APP一站式影视智能功能,几乎可以满足影视人工作中的所有需求。包含的功能有:文字转语音、真人配音、自动加字幕、一键去水印、提词器、拍片估价、堪景神器、影视课程、发布影视相关需求、接单赚钱....等...
- audition(audition属于什么软件)
-
Audition是一款由Adobe开发的音频编辑和混音软件,具有以下主要功能:1.音频录制和编辑:可以录制不同类型的音频,包括对话、音乐、戏剧和环境声音等,还可以使用多种音频效果处理工具对录制...
- office2020官方下载免费完整版
-
Microsoft365和Office2020的区别有以下几点:功能不同。Office2020包含Word、Excel、PowerPoint等组件,功能比较全面;而Microsoft365包...
欢迎 你 发表评论:
- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
