zoukankan      html  css  js  c++  java
  • Python魔法函数

    一.什么是魔法函数

      Python内置的以双下划线开头并以双下划线结尾的函数(不能自己定义,没有用),如__init__(),__str__(),__getitem()__等很多,用于实现并定制很多特性,非常灵活,且是隐式调用的。

      如__getitem__()可以把类变成一个可迭代的对象(一次一次取数据,直到抛异常):

    二.Python的数据模型以及数据模型对Python的影响

      魔法函数会直接影响到Python语法本身,如让类变成可迭代的对象,也会影响Python的一些内置函数的调用,如实现__len__()能对对象调用len()方法。

    三.魔法函数一览

      1.非数学运算:

        1.1字符串表示:__repr__,__str__

          __str__:定制字符串格式化(类到字符串),__repr__类似,但是是开发模式下

        1.2集合序列相关:__len__,__getitem__,__setitem__,__delitem__,__contains__

        1.3迭代相关:__iter__,__next__

        1.4可调用:__call__

        1.5with上下文管理器:__enter__,__exit__

        1.6数值转换:__abs__,__bool__,__int__,__float__,__hash__,__index__

        1.7元类相关:__new__,__init__

        1.8属性相关:__getattr__、 __setattr__,__getattribute__、setattribute__,__dir__

        1.9属性描述符:__get__、__set__、 __delete__

        1.10协程:__await__、__aiter__、__anext__、__aenter__、__aexit__

      2.数学运算:

        2.1一元运算符:__neg__(-)、__pos__(+)、__abs__

        自定制__abs__也影响了abs()内置方法

        

        2.2二元运算符:__lt__(<)、 __le__ <= 、 __eq__ == 、 __ne__ != 、 __gt__ > 、 __ge__ >=

        2.3算术运算符:__add__ + 、 __sub__ - 、 __mul__ * 、 __truediv__ / 、 __floordiv__ // 、 __mod__ % 、 __divmod__ divmod() 、 __pow__ ** 或 pow() 、 __round__ round()

          

        2.4反向算术运算符:__radd__ 、 __rsub__ 、 __rmul__ 、 __rtruediv__ 、 __rfloordiv__ 、 __rmod__ 、__rdivmod__ 、 __rpow__

        2.5增量赋值算术运算符:__iadd__ 、 __isub__ 、 __imul__ 、 __itruediv__ 、 __ifloordiv__ 、 __imod__ 、__ipow__

        2.6位运算符:__invert__ ~ 、 __lshift__ << 、 __rshift__ >> 、 __and__ & 、 __or__ | 、 __xor__ ^

        2.7反向位运算符:__rlshift__ 、 __rrshift__ 、 __rand__ 、 __rxor__ 、 __ror__

        2.8增量赋值位运算符:__ilshift__ 、 __irshift__ 、 __iand__ 、 __ixor__ 、 __ior__

    四.说明魔法函数的重要性(举例len())

       如果len()方法调用的对象是Python内置的类型,如list,set,dict(cpython)等,会直接获取(有一个数据表示长度),而不用去遍历。

     

  • 相关阅读:
    nRF5 SDK for Mesh(二) Getting started 快速开始
    QT 简单 TCP 通信,发送数据到服务器
    Bluetooth® Low Energy Beacons
    CC2540 低功耗串口, POWER_SAVING 模式 下 串口 0 的使用
    LWIP network interface 网卡 初始化 以 STM32 为例子 后面会有 用 2G 或者4G 模块 用 PPP拨号的 形式 虚拟出网卡 所以先以 这个为 前提
    R 语言入门
    Django 框架
    Windows 下 Django 安装
    windows 下搭建 git 服务器 copssh+git
    python Pystaller 将python文件打包成exe
  • 原文地址:https://www.cnblogs.com/lyq-biu/p/10309133.html
Copyright © 2011-2022 走看看