本小节主要讲python中魔法函数,并用表格的方式列举出python中的魔法函数,供大家查找学习。最后还讲了len函数在python中是如何工作的。
1.魔法函数定义
魔法函数是python中的一种高级语法,允许你在类中自定义函数,自定义的函数格式为(xxx),并绑定到类的特殊方法中。
注意:魔法函数必须是python中提供的函数,自己定义的函数是没有用的。
class Company:
def __init__(self,employee_list):
self.employee = empoloyee_list
def __getitem__(self, item):
return self.employee[item]
company = Company(['wali','eve'])
for em in company:
print(em)
#输出
wali
eve
定义Company
类,类是不能够迭代的,就是不能用for语句来进行遍历,当我们在company类中定义了__getitem__
方法后,company类就可以迭代了,python解释器在内部帮我们完成了功能。
2.魔法函数一览
非数学运算
作用 | 函数名称 |
---|
字符串相关 | __repr__、__str__ |
集合、序列相关 | __len__、__getitem__、__setitem__、__delitem__、__contains__ |
迭代相关 | __iter__、__next__ |
可调用 | __call__ |
上下文管理 | __enter__、__exit__ |
数值转换 | __abs__、__bool__、__int__、__float__、__hash__、__index__ |
元类相关 | __new__、__init__ |
属性相关 | __getattr__、__setattr__、__getattribute__、__setattribute__、__dir__ |
属性描述符 | __get__、__set__ |
协程 | __await__、__aiter__、__anext__、__aenter__、__aexit__ |
数学运算
作用 | 函数名称 |
---|
一元运算符 | __neg__(-)、__pos__(+)、__abs__ |
二元运算符 | __lt__(<)、__le__(<=)、__eq__(==)、__ne__(!=)、__gt__(>)、__ge__(>=) |
算术运算符 | __add__(+)、__sub__(-)、__mul__(*)、__truediv__(/)、__floordiv__(//)、__mod__(%)、__divmod__、__pow__(**)、__round__ |
反向算术运算符 | __radd__、__rsub__、__rmul__、__rtruediv__、__rfloordiv__、__rmod__、__rdivmod__、__rpow__ |
增量赋值算术运算符 | __iadd__、__isub__、__imul__、__itruediv__、__ifloordiv__、__ipow__ |
位运算符 | __invert__(~)、__lshift__(«)、__rshift__(»)、__and__(&)、__or__(|)、__xor__(^) |
反向位运算符 | __rishift__、__rrshift__、__rand__、__rxor__、__ror__ |
增量赋值位运算符 | __ilshift__、__irshift__、__iand__、__ixor__、__ior__ |
3.len函数
class Person:
def __init__(self,name):
self.name = name
def __len__(self):
return len(self.name)
p = Person(['aaa','bbb'])
print(len(p))
>>> 2
当我们使用len
方法时,python会隐含调用对象__len__
方法,使用len获取list
、set
、dict
、tuple
等等Python内置类型的数据长度时,其实没有调用对象__len__
方法,python的解释器是C语言来编写的,在内部维护一个数据长度的变量,为提升执行效率,直接获取内部数据的长度。