
python实现原理&源码剖析
文章平均质量分 69
kobe_OKOK_
Python爱好者 曼巴精神践行者
展开
-
<深入剖析CPython源码>-解释器角度看Python一切皆对象
1 一切皆对象动态语言与静态语言在面向对象层面的区别:python比java和C++的面向对象更加“彻底”。Python函数和类也是对象,属于Python的一等公民:可以赋值给另一个变量可以添加到集合(list,dict)中可以作为参数传递给函数可以作为函数的返回值>>> int<class 'int'>>>> int("0123")123从输出结果可以看出,int是一个类,类()是实例化的过程2 type、object和cla原创 2021-12-05 20:32:37 · 1154 阅读 · 1 评论 -
玩转Python魔法
文章目录1 普通对象为什么可以点出属性和方法1 列表,元组,字典为什么可以使用[]取值3 自定义上下文管理器4 自定义迭代器、可迭代对象5 Python类的灵魂中的灵魂1 普通对象为什么可以点出属性和方法先写一段很简单的代码:class Foo: def __init__(self, name='', age=0): self.name = name self.age = age def introduce(self): print(f原创 2021-10-16 23:15:23 · 928 阅读 · 0 评论 -
<数据结构与算法>-Python二叉搜索树
文章目录原创 2021-08-30 23:13:07 · 404 阅读 · 0 评论 -
<数据结构与算法>-Python链表
文章目录1 概述2 创建链表2.1 头插法2.2 尾插法1 概述链表是由一系列节点组成的元素集合。每个节点包含两部分,数据域和指针域,python虽然弱化了指针的概念,但是思想一直在。链表是通过指针链接各个节点的数据结构一个简单的链表classclass Node: def __init__(self, item): self.item = item self.next = Nonea = Node(1)b = Node(2)c = Node(3原创 2021-08-25 22:16:33 · 124 阅读 · 0 评论 -
<数据结构与算法>-Python列表-栈-队列
文章目录1 列表2 栈3 队列1 列表Python中的列表与C中的数组有哪些不同?首先想一下C中数组获取数据的时间复杂度。#include <stdio.h>#include <stdlib.h>int main(void){ int arr[3] = {1,2,3}; printf("a[2]=%d\n",arr[2]); printf("a的地址是=%p\n",arr); printf("a[0]的地址是=%p\t a[0]存原创 2021-08-25 18:17:48 · 160 阅读 · 0 评论 -
<数据结构与算法>-快速排序
文章目录1 概述2 代码实现3 复杂度分析1 概述冒泡排序、选择排序、插入排序这三种排序算法的时间复杂度都是O(n2)O_(n^2)O(n2)对于数据量级比较大的场景,这个时间复杂度很明显是不能满足的,快速排序顾名思义,这是一个速度很快的排序算法。2 代码实现随机获取列表中的一个值,将值存储到临时变量中,遍历左右指针直到左右指针碰撞,将临时变量的值放到指针碰撞的位置step1 取出最左侧的值存为临时值,当left指针等于right指针后退出循环,退出后,将临时值赋给lefr指针或者righ原创 2021-08-23 16:48:56 · 103 阅读 · 0 评论 -
<数据结构与算法>-插入排序
文章目录1 概述2 代码实现3 复杂度分析1 概述将插入排序的场景比喻成打扑克牌,当你抓牌后会按照顺序将牌插入到指定位置。对于有N个元素的列表。默认手里会有一张牌,假定是列表的第一个元素,那么,需要循环N-1次,拿到数据后插入到相应的位置。2 代码实现l1 = [9, 7, 8, 2, 5, 1, 3, 6, 4]def insert_sort(li): for i in range(1,len(li)): # 表示摸到牌的下标 tmp = li[i] # 存储抓到原创 2021-08-22 15:05:59 · 78 阅读 · 0 评论 -
<数据结构与算法>-选择排序
文章目录1 概述2 代码实现1 概述如上图所示,橙色代表有序区,淡蓝色代表无序区,红色的代表需要排序的数据。外层循环,从下标为1的数据开始一直到最末尾的数据,对于一个N个数据的列表,最后一个元素的下标是len(N)-1外层循环可以这样写for i in range(1,len(N)) 因为range是包首不包尾的,所以直接用len(N)内层循环是从0到i,for j in range(i) N[j]2 代码实现使用一个新列表放排序好的值new_list = []sort_list原创 2021-08-22 14:20:34 · 165 阅读 · 0 评论 -
<数据结构与算法>-冒泡排序
文章目录1 概述2 代码实现3 时间复杂度1 概述如上图所示,橙色区是有序区,淡蓝色是未排序区,绿色表示正在执行的排序过程。冒泡排序有两层循环,一次外层循环的目的是将无序区的最大值交换到有序区,当无序区只剩下一个数字的时候说明排序完成,所以外层循环的次数应该是列表中元素的个数减去1次;一次内层循环的目的是使用列表的小标遍历无序区,当无序区的当前值大于当前值前面的值,那么将两个数交换,也就是较大的数移动到左侧,较小的数移动到右侧,计算内层循环的循环周期要考虑两个方面:首先,对于第一次外层循环中,内层原创 2021-08-21 22:01:18 · 909 阅读 · 0 评论 -
<数据结构与算法>-查找算法
文章目录1 顺序查找1.1 概述1.2 代码实现1.3 时间复杂度2 二分查找2.1 概述2.2 代码实现2.3 时间复杂度1 顺序查找1.1 概述顾名思义,顺序查找就在一个序列中查找,当找到后就返回这个序列的索引,否则返回None1.2 代码实现def sort_select(li, val): """ :param li:序列 :param val: 查找的值 :return: index: 返回索引值 """ for i in range(le原创 2021-08-21 21:31:57 · 72 阅读 · 0 评论 -
深入解读Python中object和type
文章目录1 对象、类、类型2 对象的类3 Python中的"新式类"4 object类有什么魔法5 object与type1 对象、类、类型实例化:如果一个类后面加一个括号就返回一个对象,这个对象就是这个类的实例class A: passa = A()print(a.__class__) # <class '__main__.A'>继承:如果一个类继承自一个类,继承的这个类是子类,被继承的类是超类或者是父类,Python中可以单继承,也可以多继承class A:原创 2021-08-19 00:36:13 · 488 阅读 · 0 评论 -
<Fluent Python>Python的数据结构-字典
文章目录1 泛映射类型1.1 字典的键必须是可散列的2 字典推导式3 字典实现的魔法方法4 字典怎么处理找不到的键5 __missing__特殊方法6 标准库中特殊的字典6.1 OrderedDict6.2 ChainMap6.3 Counter7 子类化UserDict8 剖析抽象基类-Sized为例字典类型是Python语言的基石。字典有关的内置函数在__builtins__.__dict__Python使用散列表对字典进行了优化,使得字典查询时间复杂度能够达到O(1)1 泛映射类型_col原创 2021-08-14 10:51:57 · 258 阅读 · 0 评论 -
<Fluent Python>剖析装饰器实现原理
文章目录1 一个有状态的类1 一个有状态的函数“闭包”装饰器在python中真的很重要,几乎所有的框架都在用装饰器,装饰器Python面试中避不开的话题,今天我们就来彻底搞清楚装饰器1 一个有状态的类代码是枯燥的,结合生活中的实例就会变得很有意思,我们定义一个类,这个类的作用是计算平均数,语言上可能不是很好描述,直接敲代码。方式一class MakeAvg: """ 定义一个有状态的求序列平均数的类 """ def __init__(self): se原创 2021-08-11 22:55:16 · 127 阅读 · 0 评论