python魔术方法的学习

判断是否为可迭代对象

from collections.abc import Iterableobj = [1, 2, 3]  # 替换为你要判断的对象
if isinstance(obj, Iterable):print("这是一个可迭代对象")
else:print("这不是一个可迭代对象")

_next_

是 Python 中迭代器对象的一个方法,用于获取下一个元素。
当使用迭代器进行迭代时,通过调用 __next__ 方法可以依次获取迭代器中的元素,
直到没有更多元素可获取时,会引发 StopIteration 异常。

产生生成器的方法:

  1. 使用函数和 yield 关键字**:在函数中使用 yield 语句来定义生成器。
  def func()...yield
  1. 列表推导式**:可以通过在列表推导式中使用 yield 来创建生成器。
    gen = (i for i in range(5))
    generator就是生成器
    1. next():获取生成器中的下一个元素。
    2. send(value) :向生成器发送一个值,并继续执行生成器函数到下一个 yield 语句。
    3. throw(type, value=None, traceback=None):在生成器内部抛出异常。
    4. close():关闭生成器,后续再调用 __next__() 会引发 StopIteration 异常。
    5. 协程:
      执行过程中暂停和恢复,允许在一个函数内部实现多个任务的协作执行。协程通过yield关键字或特定的协程库来实现。

Python 的可迭代对象:

  1. 列表(List)
  2. 元组(Tuple)
  3. 字符串(String)
  4. 字典(Dictionary)
  5. 集合(Set)
  6. 文件对象(File Objects)
  7. 迭代器与迭代器:
    1. 可迭代的对象并不一定就是迭代器。
    2. 可迭代对象是能够通过迭代操作依次获取元素的对象,
    3. 而迭代器是实现了迭代器协议的对象,它不仅可以被迭代,
    4. 还能记住当前的迭代位置,并在每次迭代时返回下一个元素。
      迭代器与生成器:
      迭代器:是一个对象,它实现了迭代器协议,能够逐个返回元素。
      生成器:是一种特殊的迭代器,它通过使用yield关键字来定义,可以在执行过程中暂停和恢复,按需生成元素。
      生成器是创建迭代器的一种简洁方式,

魔术方法:

  1. 魔术方法(Magic Methods)是 Python 中一些具有特殊名称和功能的方法。
    它们通常以双下划线开头和结尾,如__init____str____len__等。
    1. __init__:类的构造方法,用于初始化对象。
    2. 触发条件
      _str_方法的触发条件主要有以下几种: 使用str()`函数将对象转换为字符串时**。 打印对象时
    3. 注意点
      在自定义__str__方法时需要注意以下几点:
      1. 返回值应为字符串类型:确保返回的是一个能够清晰表示对象的字符串。
      2. 简洁明了:尽量使返回的字符串简洁易懂,能够准确反映对象的关键信息。
      3. 一致性:保持返回的字符串与对象的实际状态一致,避免产生误导。
  2. __str__:定义对象的字符串表示形式。
        class MyClass:def __init__(self, name):self.name = namedef __str__(self):return f"MyClass object with name: {self.name}"obj = MyClass("example")print(obj)
  1. __len__:定义对象的长度。
    class MyList:def __init__(self, items):self.items = itemsdef __len__(self):return len(self.items)my_list = MyList([1, 2, 3])print(len(my_list))
  1. __del__:对象被销毁时调用。
    __del__方法的触发条件通常有以下几种情况:
    1. 程序结束时**:当程序正常结束运行时,会触发对象的__del__方法。
    2. 对象的所有引用都被删除时**:当对象不再有任何其他变量引用它时,会触发__del__方法。
  2. __eq____ne__lt__le____gt____ge__:用于比较对象。
  3. sys.getrefcount()
    获取对象的引用计数
  4. __init__方法是 Python 中的一个特殊方法,也称为构造方法。
    它在创建对象时被自动调用,用于对新创建的对象进行初始化操作。
    可以在__init__方法中为对象的属性赋值,执行其他必要的初始化任务。
    通过传递参数给__init__方法,为对象的name属性赋值
     class MyClass:def __init__(self, name):self.name = name

创建对象并进行初始化

obj = MyClass("示例对象")
__del__
__del__方法在对象即将被销毁时被调用。
需要注意的是,__del__方法的执行时间并不确定,
它可能不会及时被触发,尤其是在程序正常结束时。
并且,不建议在__del__方法中执行一些关键的操作或资源释放,因为它的执行可能不可靠。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/470870.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python数据类型(一):bool布尔类型

Python数据类型系列目录 Python数据类型(一):bool布尔类型 文章目录 一、创建bool值二、逻辑运算符三、布尔类型与其他类型的转换四、条件判断五、循环控制六、相关问答 在Python编程语言中,布尔类型是一种基本的数据类型&#x…

C++面试基础知识:排序算法 C++实现

上周实习面试,手撕代码快排没写出来,非常丢人,把面试官都给逗笑了。 基础不牢,地动山摇,基础的算法还是要牢记于心的。 插入排序 分为有序区和无序区,每次从无序区中选出一个,放到有序区域中。…

LabVIEW开发相机与显微镜自动对焦功能

自动对焦是显微成像系统中的关键功能,通常由显微镜的电动调焦模块或特定的镜头系统提供,而工业相机则主要用于高分辨率图像的采集,不具备独立的自动对焦功能。以下是自动对焦的工作原理、实现方式及实际应用案例。 1. 自动对焦的工作原理 &a…

一文简单了解Android中的input流程

在 Android 中,输入事件(例如触摸、按键)从硬件传递到应用程序并最终由应用层消费。整个过程涉及多个系统层次,包括硬件层、Linux 内核、Native 层、Framework 层和应用层。我们将深入解析这一流程,并结合代码逐步了解…

详解基于C#开发Windows API的SendMessage方法的鼠标键盘消息发送

在C#中,SendMessage方法是一个强大的工具,它允许我们与Windows API交互,模拟键盘和鼠标事件。本文将详细介绍如何使用SendMessage方法来发送鼠标和键盘消息。 1. SendMessage方法概述 SendMessage是Windows API中的一个函数,它用…

爱普生SG-8200CJ可编程晶振在通信设备中的应用

在现代通信技术中,时钟源是确保系统运行稳定性的核心组件之一。随着数据传输速度的提高和系统复杂性的增加,通信设备对时钟的精度、稳定性和可靠性提出了更高的要求。爱普生SG-8200CJ可编程晶振,凭借其优异的性能特性,在通信设备领…

ssm100医学生在线学习交流平台+vue(论文+源码)_kaic

摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势,医学生在线学习交流平台当然也不能排除在外,随着医学生在线学习交流平台的不断成熟,它彻底改变了过去传统的管理方式&a…

【数据结构】交换排序——冒泡排序 和 快速排序

交换排序——冒泡排序 和 快速排序 一、冒泡排序二、快速排序2.1 不同版本的快速排序<1>霍尔版本**1> 开闭区间****2> key 的取值****3> 单次循环的筛选条件****4> 为什么要先右边后左边****5> 递归停止条件** <2>挖坑版本<3>前后指针版本 2.…

C++模板特化实战:在使用开源库boost::geometry::index::rtree时,用特化来让其支持自己的数据类型

用自己定义的数据结构作为rtree的key。 // rTree的key struct OverlapKey {using BDPoint boost::geometry::model::point<double, 3, boost::geometry::cs::cartesian>; //双精度的点using MyRTree boost::geometry::index::rtree<OverlapKey, boost::geometry::in…

Redis - 集群(Cluster)

一、基本概念 上述的哨兵模式,提⾼了系统的可⽤性.但是真正⽤来存储数据的还是master和slave节点.所有的数 据都需要存储在单个master和slave节点中. 如果数据量很⼤,接近超出了master/slave所在机器的物理内存,就可能出现严重问题了. 如何获取更⼤的空间?加机器即可!所谓&q…

【专题】计算机网络之网络层

1. 网络层的几个重要概念 1.1 网络层提供的两种服务 (1) 让网络负责可靠交付 计算机网络模仿电信网络&#xff0c;使用面向连接的通信方式。 通信之前先建立虚电路 VC (Virtual Circuit) (即连接)&#xff0c;以保证双方通信所需的一切网络资源。 如果再使用可靠传输的网络…

Jmeter性能测试 -3数据驱动实战

软件测试资料领取&#xff1a;[内部资源] 想拿年薪40W的软件测试人员&#xff0c;这份资料必须领取~ 软件测试面试刷题工具&#xff1a;软件测试面试刷题【800道面试题答案免费刷】 什么是数据驱动&#xff1f; 从数据文件中读取测试数据&#xff0c;驱动测试过程的一种测试…

INQUIRE:一个包含五百万张自然世界图像,涵盖10,000个不同物种的专为专家级文本到图像检索任务设计的新型基准数据集。

2024-11-05 &#xff0c;由麻省理工学院、伦敦大学学院等联合创建了Inquire数据集&#xff0c;这是一个包含五百万自然世界图像的文本到图像检索基准测试&#xff0c;目的是挑战多模态视觉-语言模型在专家级查询上的表现。这个数据集的创建&#xff0c;不仅填补了现有数据集在专…

DevOps工程技术价值流:加速业务价值流的落地实践与深度赋能

DevOps的兴起&#xff0c;得益于敏捷软件开发的普及与IT基础设施代码化管理的革新。敏捷宣言虽已解决了研发流程中的诸多挑战&#xff0c;但代码开发仅是漫长价值链的一环&#xff0c;开发前后的诸多问题仍亟待解决。与此同时&#xff0c;虚拟化和云计算技术的飞跃&#xff0c;…

4.4 软件设计:UML顺序图

UML顺序图 1、 UML2、 UML顺序图2.1 顺序图组成对象生命线消息 2.2 顺序图和用例登录用例 2.3 顺序图建模顺序图建模参考策略建立顺序图的步骤建立顺序图的示例 3、面对对象的设计原则3.1 特点3.2 层次3.3 注意点类设计需要强内聚&#xff0c;弱耦合可重用性框架 1、 UML 统一…

除了 Mock.js,前端还有更方便的 Mock 数据工具吗?

在前端开发中&#xff0c;模拟数据&#xff08;Mock Data&#xff09;是不可或缺的一部分&#xff0c;它能够帮助开发者在后端接口未完成前进行界面和逻辑的测试。而 Mock.js 是一个广泛使用的库&#xff0c;它通过简洁的语法和强大的功能&#xff0c;让前端开发者可以轻松地创…

继承和多态(上)

目录 一.继承 1.何为继承 2.继承的语法 3.子类访问父类 (1)子类访问父类的成员变量 (2)子类访问的父类方法 二.super关键字 1.super用于调用父类的构造方法 2.super用于调用父类的实例方法 3.super用于访问父类的实例变量 三.子父类构造方法 和代码块的执行优先顺序…

【练习案例】30个 CSS Javascript 加载器动画效果

本文分享一些 Loader CSS、Javascript 示例&#xff0c;这些示例均来源于Codepen网站上&#xff0c;里面有案例的源码与显示效果&#xff0c;您可以用于练习&#xff0c;也可以将您认为有趣的动画&#xff0c;添加到您的项目中&#xff0c;以帮助您创建更加有趣的等待页面加载动…

45.第二阶段x86游戏实战2-hook监控实时抓取游戏lua

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要…

限流算法(令牌通漏桶计数器)

限流算法&#xff08;令牌桶&漏桶&计数器 &#xff09; 什么是限流&#xff1f; 限流是为保护自身系统和下游系统不被高并发流量冲垮&#xff0c;导致系统雪崩等问题 限流在很多场景中用来限制并发请求量&#xff0c;比如说秒杀抢购、双11高并发流量等 在保证系统可…