python魔法方法是什么

时间:2022-07-23
本文章向大家介绍python魔法方法是什么,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一切皆对象。

“在Python中,魔法方法是指Python内部已经包含的,被双下划线所包围的方法,这些方法在进行特定的操作时会自动被调用,它们是Python面向对象下智慧的结晶,而使用Python的魔法方法可以使Python的自由度变得更高。”

首先我们先来看一下几个符号的“另类”使用:

反斜杠

在Python中主要有两种用法:

  • 作为续行符,即为了使代更易读。但是,若当做行尾而不写任何内容,则会报错SyntaxError: EOL while scanning string literal
      print("hello"
            "world")
  • 用作转义 例如:n换行符、t制表符等可以直接在文本输出时使用。

不需要使用反斜杠的场景:

当出现具有定义、注释性质,规定范围的符号时,则不需要续行符就可以换行:

例如:[],(),{},或者注释语句

annotion = ``` A is not
               B ```

通过定义其他的符号进行分割的场景,例如 plotly

'''构造trace,配置相关参数'''
# 散点图
trace = go.Scatter(
   x = random_x,
   y = random_y,
   mode = 'markers'
)

+= 与 =+

+=在之前的推送中使用还算频繁,这里就简单辨别一下这两个区别:

首先变量可以分为不可变类型可变类型,对于不可变类型例如字符串、元组、数字,无论是执行 a = a+b 还是 a += b,a 的内存地址都会变,即生成了新的变量;对于可变变量时,例如列表:

my_list = my_list + new_list,my_list 会成为一个新的变量;

my_list += new_list,my_list 内存地址并不会发生变化,相当于 extend

从方法的背后魔法方法可以清楚的解释这种现象: += 背后的魔法方法是 __iadd__ +背后的魔法方法是 __add__ 如果一个类,没有实现 __iadd__方法的话,python就会退一步调用__add__方法 总体来说,可变类型都有__iadd__方法,而不可变类型没有__iadd__方法

举个魔法方法的小例子:

>>> list1 = [a,b,c]
>>> list2 =[1,2,3]

>>> list1.__add__(list2)
[a,b,c,1,2,3]

# reduce方法
>>> from functools import reduce
>>> reduce(list.__add__, (list1,list2))
[a,b,c,1,2,3]

同理,=* 和 *=,区别是背后的魔法方法分别为__imul__和__mul__。在上述的场景中还可以使用 * 进行处理:

*

我们都知道,列表支持符号运算,例如+-*;我们在列表生成式中也聊过迭代方式去快速进行列表处理,其中值得一提是itertools内置模块,通过from itertools import chain等方式调用。

*还可以用于列表解包后合并,

>>> list1 = [a,b,c]
>>> list2 =[1,2,3]

>>> [*list1,*list2]
[a,b,c,1,2,3]

“魔法方法是python内置方法,不需要主动调用,存在的目的是为了给python的解释器进行调用,几乎每个魔法方法都有一个对应的内置函数,或者运算符,当我们对这个对象使用这些函数或者运算符时就会调用类中的对应魔法方法("__方法名__"),可以理解为重写内置函数。”