Python随笔-1

本文最后更新于:2022年5月23日 凌晨

前言

其实就是想补充下多道系统作业那篇文章里讲到的东西(指getMethod函数),补充下相关知识方便各位理解。

正文

前后双下划线方法

同时具有前后双下划线的名称在Python中有特殊用途,我们最熟悉的应该就是__init__了,构造对象函数。当然啦,Python还是有非常多的对象属性的,如果想了解更多对象属性,可以调用dir函数,比如:

1
2
3
4
5
6
7
>>> dir(max)
['__call__', '__class__', '__delattr__', '__dir__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__gt__',
'__hash__', '__init__', '__init_subclass__', '__le__', '__lt__',
'__module__', '__name__', '__ne__', '__new__', '__qualname__',
'__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__',
'__sizeof__', '__str__', '__subclasshook__', '__text_signature__']

在这里,我直接查看了一个内置函数max的属性,可以看到有非常多属性,我们也不必全部知道他们都用来干嘛。
仔细看的话会发现,__lt__也在里面,那么它到底是什么呢?其实它代表的是**比较运算符’<’**。

sort函数

先上Python官方文档点我跳转

sort(*, key=None, reverse=False)

This method sorts the list in place, using only < comparisons between items. Exceptions are not suppressed - if any comparison operations fail, the entire sort operation will fail (and the list will likely be left in a partially modified state).

也就是说,sort方法其实是根据 < 运算符来进行排序的,也就是升序排序,如果觉得文字难以读懂,不妨写点东西试试:

1
2
3
4
>>> list=[5,4,3,2,1]
>>> list.sort()
>>> print(list)
[1, 2, 3, 4, 5]

我们也应该记住一点,sort的排序算法是稳定的,当两个值相等的时候,即使是排序后它们的相对位置也不会变。
扩展

从上面我们能看到sort还支持两个额外的参数(注意是keyword-only arguments,传入必须像这样:key=xxx, reverse=xxx
reverse很好理解,传入一个Boolean值(True or False),如果是True则倒序排列,默认为False。
key则用来产生排序算法所依赖的对比关键字,比如说,在对一些字符串排序时,可以用key=str.lower来实现忽略大小写的排序,或者用key=len来实现基于字符串长度的排序。

小结

看完上面这点,再结合函数学习笔记那里的一些知识,其实就应该能清楚知道getMethod的机制和作用什么的了,传入一个字符串,根据字符串的不同返回不同的函数对象,用来重载JCB类的__lt__属性(在Python中是可以重载运算符的),这样在之后,我们对含有JCB类对象的列表中调用sort方法,就可以按照我们想要的排序方式来排序列表了。


这里有一只爱丽丝

希望本文章能够帮到您~


Python随笔-1
https://map1e-g.github.io/2022/04/17/python-essay-1/
作者
MaP1e-G
发布于
2022年4月17日
许可协议