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的解释器进行调用,几乎每个魔法方法都有一个对应的内置函数,或者运算符,当我们对这个对象使用这些函数或者运算符时就会调用类中的对应魔法方法("__方法名__"),可以理解为重写内置函数。”
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法