- 博客(28)
- 收藏
- 关注
原创 python动态添加属性和方法、__slots__的作用
python是动态语言1. 动态语言的定义动态编程语言 是 高级程序设计语言 的一个类别,在计算机科学领域已被广泛应用。它是一类 在运行时可以改变其结构的语言 :例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。动态语言目前非常具有活力。例如JavaScript便是一个动态语言,除此之外如 PHP 、 Ruby 、 Python 等也都属于动态语言,而 C ...
2018-05-10 13:00:42 633
原创 python装饰器
装饰器装饰器是程序开发中经常会用到的一个功能,用好了装饰器,开发效率如虎添翼,所以这也是Python面试中必问的问题,但对于好多初次接触这个知识的人来讲,这个功能有点绕,自学时直接绕过去了,然后面试问到了就挂了,因为装饰器是程序开发的基础知识,这个都不会,别跟人家说你会Python。先上代码:def makeItalic(func): '''闭包''' print('...
2018-05-09 19:58:05 134
原创 python闭包
什么是闭包# 什么是闭包:在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包def FunctionOut(a, b): # 函数内部再定义一个函数 def FunctionIn(x): # 这个函数用到了外边函数的变量 print(a * x + b) # 返回内部函数的引用 ...
2018-05-09 15:28:36 244
原创 python迭代器
迭代器迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 可迭代对象以直接作用于 for 循环的数据类型有以下几种:一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等;一类是 generator ,包括生成器和带 yield 的generator fu...
2018-05-09 14:04:47 115
原创 python生成器
通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。# 在Python中,这种一边...
2018-05-09 11:15:36 136
原创 python中的进制、位运算
进制间的转换编程用十进制,十进制转换为二进制、八进制、十六进制In [135]: bin(23)Out[135]: '0b10111'In [136]: oct(23)Out[136]: '0o27'In [137]: hex(23)Out[137]: '0x17'也可以直接反向获取十进制In [146]: 0b10111Out[146]: 23In [147]: 0o27O...
2018-05-08 20:49:13 4253 2
原创 python中==、is的区别和深拷贝、浅拷贝的区别
1. == 与 is 的区别:In [9]: a = [100,200,300]In [10]: b = [100,200,300]In [11]: a is bOut[11]: FalseIn [12]: a == bOut[12]: Trueis 是比较两个引用(地址)是否指向了同一个对象(引用比较)。== 是比较两个对象是否相等,值相等的两个对象内存地址不一定相等In [1...
2018-05-08 20:33:51 228 1
原创 python属性property
1. 私有属性添加getter和setter方法通过公有方法获取私有属性class Property(object): '''有关property的用法''' def __init__(self): # 私有属性 self.__money = 100 def getMoney(self): '''通过公有方法获取私有属性''...
2018-05-08 19:17:50 122
原创 python中import导入模块的相关问题
1. import 搜索路径import_module_1.pyimport sysprint(sys.path)'''import的搜索路径:从上往下依次进行搜索['/home/longhui/Desktop/core_python_programming/venv/include/python_advanced_programming', '/home/longhui/Deskt...
2018-05-08 15:52:36 247
原创 python实现插入排序
插入排序插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。插入排序分析实现'''i = 1 , [1] 依次从后向前比较, alist[1]与alist[0]比较i = 2 , [...
2018-05-07 19:53:56 162
原创 python实现选择排序
选择排序选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移...
2018-05-07 19:51:22 141
原创 python实现冒泡排序
冒泡排序冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序算法的运作如下:比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。对每一对相邻元素作同样...
2018-05-07 19:48:52 187
原创 python实现二叉树的创建和二叉树的遍历
二叉树的节点表示以及树的创建通过使用Node类中定义三个属性,分别为elem本身的值,还有lchild左孩子和rchild右孩子class Node(object): '''树节点''' def __init__(self, item): self.elem = item self.lchild = None self.rchild ...
2018-05-07 18:10:10 981
原创 python实现二分法查找
搜索搜索是在一个项目集合中找到一个特定项目的算法过程。搜索通常的答案是真的或假的,因为该项目是否存在。 搜索的几种常见方法:顺序查找、二分法查找、二叉树查找、哈希查找二分法查找二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查...
2018-05-07 11:56:20 2242
原创 python实现归并排序
归并排序归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。归并排序的分析实现def MergeSort(alist): '''归并排序''' n = le...
2018-05-07 10:18:57 187
原创 python实现快速排序
快速排序快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。步骤为:从数列中挑出一个元素,称为"基准"(pivot), 重新排序数列...
2018-05-06 21:47:13 3150
原创 python实现希尔排序
希尔排序希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。希尔排序过程希尔排序的基本思想是:将数组列...
2018-05-05 14:16:23 109
原创 python双端队列的实现
双端队列双端队列(deque,全名double-ended queue),是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队。操作Deque() 创建一个空的双端队列add_front(item) 从队头加入一个item元素add_rear(item) 从队尾加入一个item元素remove_front() ...
2018-05-05 10:12:14 801
原创 python实现队列
队列的实现同栈一样,队列也可以用顺序表或者链表实现。操作Queue() 创建一个空的队列enqueue(item) 往队列中添加一个item元素dequeue() 从队列头部删除一个元素is_empty() 判断一个队列是否为空size() 返回队列的大小class Queue(object): '''队列,先进先出''' def __init__(self): s...
2018-05-04 21:39:22 262
原创 python实现栈结构
栈结构实现栈可以用顺序表实现,也可以用链表实现。栈的操作Stack() 创建一个新的空栈push(item) 添加一个新的元素item到栈顶pop() 弹出栈顶元素peek() 返回栈顶元素is_empty() 判断栈是否为空size() 返回栈的元素个数class Stack(object): '''栈,用顺序表实现''' def __init__(self): ...
2018-05-04 21:37:42 459
原创 python实现双向链表
双向链表一种更复杂的链表是“双向链表”或“双面链表”。每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值;而另一个指向下一个节点,当此节点为最后一个节点时,指向空值。操作is_empty() 链表是否为空length() 链表长度travel() 遍历链表add(item) 链表头部添加append(item) 链表尾部添加insert(pos, item) 指定位置添加re...
2018-05-04 21:35:17 489
原创 python实现单向循环链表
单向循环链表单链表的一个变形是单向循环链表,链表中最后一个节点的next域不再为None,而是指向链表的头节点。操作is_empty() 判断链表是否为空length() 返回链表的长度travel() 遍历add(item) 在头部添加一个节点append(item) 在尾部添加一个节点insert(pos, item) 在指定位置pos添加节点remove(item) 删除一个节点search...
2018-05-04 21:30:01 1143
原创 python实现单向链表
单向链表单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。表元素域elem用来存放具体的数据。链接域next用来存放下一个节点的位置(python中的标识)变量p指向链表的头节点(首节点)的位置,从p出发能找到表中的任意节点。# 节点, 包括:元素和下一个节点的地址clas...
2018-05-04 21:18:15 267
原创 Python中的顺序表
Python中的list和tuple两种类型采用了顺序表的实现技术,具有前面讨论的顺序表的所有性质。tuple是不可变类型,即不变的顺序表,因此不支持改变其内部状态的任何操作,而其他方面,则与list的性质类似。list的基本实现技术Python标准类型list就是一种元素个数可变的线性表,可以加入和删除元素,并在各种操作中维持已有元素的顺序(即保序),而且还具有以下行为特征:基于下标(位置)的高...
2018-05-04 21:02:30 685
原创 Python内置类型程序性能分析
timeit模块timeit模块可以用来测试一小段Python代码的执行速度。class timeit.Timer(stmt='pass', setup='pass', timer=<timer function>)Timer是测量小段代码执行速度的类。stmt参数是要测试的代码语句(statment);setup参数是运行代码时需要的设置;timer参数是一个定时器函数,与平台有关。...
2018-05-04 18:41:39 117
原创 算法概念与特性、算法效率衡量
算法的概念算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务。一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址供以后再调用。算法是独立存在的一种解决问题的方法和思想。对于算法而言,实现的语言并不重要,重要的是思想。算法可以有不同的语言描述实现版本(如C描述、C++描述、Python描述等),我们现在...
2018-05-04 18:36:48 496
原创 【拓展】 python3中类的重点与难点:类继承中的私有属性和私有方法
私有属性、方法——Python并没有真正的私有化支持,但可用下划线得到伪私有尽量避免定义以下划线开头的变量 (1)xxx 公有变量(2)_xxx "单下划线 " 开始的成员变量叫做保护变量,意思是只有类对象(即类实例)和子类对象自己能访问到这些变量,需通过类提供的接口进行访问;不能用'from module import *'导入 (3)__xxx 类中的私有变量/方法名...
2018-05-04 18:21:30 785 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人