自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(88)
  • 收藏
  • 关注

原创 python高级(如何实现属性可修改的函数装饰器)

案例:为分析程序内哪些函数执行时间开销较大,我们定义一个带timeout参数的函数装饰器。装饰功能如下:1.统计被装饰函数单次调用运行时间。2.时间大于参数timeout的,将此次函数调用记录到log日志当中。3.运行时间可修改timeout的值。为包裹函数增添一个函数,用来修改闭包中使用的自由变量。在python3中,使用nonlocal访问嵌套作用域中的变量引用f...

2019-03-08 10:32:47 598

原创 python高级(如何在环状数据结构中管理内存)

在python中,垃圾回收器通过引用计数来回收垃圾对象,但某些环状数据结构(树,图....),存在对象间的循环引用,比如树的父节点引用子节点,子节点也同时引用父节点。此时同时del掉引用父子节点,两个对象不能被立即回收。如何解决此类的内存管理内存管理问题?使用标准库weakref,它可以创建一种能访问对象但不增加引用计数的对象。import weakref,sysclass Da...

2019-03-07 20:14:21 399

原创 python高级(使用描述符对实例属性做类型检查)

在某项目中,我们实现了一些类,并希望能像静态类型语言那样(C,C++,Java)对它们的实例属性做类型检查p = Person()p.name = 'Bob' #必须是strp.age = 18 #必须是intp.height = 1.83 #必须是float要求:1.可以对实例变量名指定类型2.赋予不正确类型时抛出异常使用描述符来实现需要类型检查的...

2019-03-07 19:28:41 616

原创 python基础(如何让类支持比较操作)

案例:有时我们希望自定义的类,实例间可以使用<,<=,>,>=,==,!=符号进行比较,我们自定义比较的行为。例如:有一个矩形的类,我们希望比较两个矩形的实例时,比较的是他们的面积。比较符号运算符重载,需要实现以下方法:__lt__,__le__,__gt__,__ge__,__eq__,__ne__使用标准库下的functools下的类装饰器total_o...

2019-03-07 18:34:55 313

原创 python高级(如何创建可管理的对象属性(设置property成员属性修饰符))

案例:在面向对象编程中,我们把方法(函数)看作对象的接口。直接访问对象的属性可能是不安全的,或设计上不够灵活。但是使用调用方法在形式上不如访问属性简洁。circle.setRadius(5.0) #繁circle.radius = 5.0能否在形式上是属性访问,但实际上调用方法?使用property函数为类创建可管理属性,fget/fset/fdel对应相应属性访问...

2019-03-07 16:24:06 414

原创 python高级(如何派生内置不可变类型并修改其实例化行为)

案例:我们想自定义一种新类型的元组,对于传入的可迭代对象,我们只保留作其中int类型且值大于0的元素,例如:intTuple([1,-1,'abc',6,['x','y'],3)b => (1,6,3)要求intTuple是内置tuple的子类,如何实现?重写__new__类方法,new方法是对参数进行实例操作,在此之间,对实例参数进行预操作,修改实例化行为clas...

2019-03-07 15:08:06 298 1

原创 python高级(如何在一个for循环语句中迭代多个可迭代对象(并行、串行迭代))

案例:某班学生期末考试成绩,语文、数学、英语分别储存在3个列表中,同时迭代三个列表,计算每个学生的总分(并行)import randomchinese = [random.randint(60,100) for _ in range(50)] #假设班级有50名学生,每个学生随机生成60-100之间的分数,生成三科的成绩列表mathematics = [random.randin...

2019-03-07 12:57:12 2347

原创 python高级(如何实现反向迭代及对迭代器做切片操作)

案例:实现一个连续浮点数发生器FloatRange(和range类似),根据给定范围(start,end)和步长值(step)产生一些连续浮点数序列,如迭代FloatRange(3.0,4.0,0.2)可产生序列:正向:3.0->3.2->3.4->3.6->3.8->4.0反向:4.0->3.8->3.6->3.4->3.2-&g...

2019-03-07 11:15:28 582

原创 python高级(如何使用生成器函数实现可迭代对象)

案列:某软件要求,从网络抓取各个城市气温信息,并依次显示:北京:15-20天津:17-22长春:12-18..........如果一次抓取所有城市气温再显示,显示第一个城市气温时,有很高的延时,并且浪费存储空间。我们期望以'用时访问'的策略,并且能把所有城市气温封装到一个对象里,可用for语句进行进行迭代,如何解决?import requestsfrom collec...

2019-03-07 09:58:20 602

原创 python高级(元类、自定义元类)

什么是元类(metaclass)?元类是类的类,是类的模板元类的实例为类,正如类的实例为对象class Foo: passt1=Foo() #t1是通过Foo类实例化的对象print(type(f1))print(type(Foo))所有的对象都是实例化或者说调用类而得到的(调用类的过程称为类的实例化),比如对象t1是调用FOO类得到的一个实例。如果一切皆为...

2019-03-06 22:33:06 5041 1

原创 python高级(hashlib加密模块)

hashlib模块Python的hashlib主要提供了常见的摘要算法,python3.x版本里代替了md5模块和sha模块,如SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法。什么是摘要算法呢?MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),是一种被广泛使用的密码散列函数,可以产生出一个 128 位(16 字节)的散列值(...

2019-03-06 19:54:54 6323

原创 python基础(函数式编程(高阶函数)map、filter、reduce、lambda匿名函数)

函数式编程可能习惯了像使用其他对象(字符串、数、序列等)一样使用函数:将其赋给变量,将其作为参数进行传递,以及从函数返回它们。在 Python 中,通常不会如此倚重函数(而是创建自定义对象),但完全可以这样做。Python提供了一些有助于进行这种函数式编程的函数:map、filter和reduce。在较新的Python版本中,函数map和filter的用途并不大,应该使用列表推导来替代它们。...

2019-03-06 18:37:07 481

原创 python基础(shutil模块、shutil归档和解包操作)

shutil模块shutil -- High-level file operations 是一种高层次的文件操作工具。类似于高级API,而且主要强大之处在于其对文件的复制与删除操作更是比较支持好。copyfile( src, dst) 从源src复制到dst中去。当然前提是目标地址是具备可写权限。抛出的异常信息为IOException. 如果当前的dst已存在的话就会被...

2019-03-06 16:25:10 455

原创 python基础(json模块)

序列化我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling....

2019-03-06 15:53:48 244

原创 python基础(相对、绝对路径,模块存放及导入)

相对路径与绝对路径相对路径:相对于引用文件本身去定位被引用的文件地址,文件路径以当前文件所在文件夹为参考位置的路径就是相对路径,相对路径中常见的符号有.和.. . 表示在当前文件夹中 .. 表示在当前文件夹的上层文件夹中 例如:./abc.jpg ../我和老师.avi my.txt(省略了.) abc/nidaye/nidama/不能看.exe(省略了.)绝对路径:相对于磁盘的位...

2019-03-06 15:01:33 5763

原创 python基础(文件内容迭代)

迭代文件内容一种常见的文件操作是迭代其内容,并在迭代过程中反复采取某种措施。在这里的所有示例中,我都将使用一个名为process的虚构函数来表示对每个字符或行所做的处理,你可以用自己的喜欢的方式实现这个函数。下面是一个简单的示例:def process(string): print('Processing:', string)更有用的实现包括将数据存储在数据结构中、计算总和、...

2019-03-06 14:37:01 1418

原创 python基础(文件操作)

文件操作文件和流,能够永久存储数据以及处理来自其他程序的数据。打开文件open()功能:打开或者创建一个文件格式:open('文件路径','打开模式')返回值:文件io对象要打开文件,可使用函数open,它位于自动导入的模块io中。函数open将文件名作为唯一必不可少的参数,并返回一个文件对象。如果当前目录中有一个名为somefile.txt的文本文件(可能是使用文本...

2019-03-06 12:21:11 632

原创 python基础(re模块(正则表达式))

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。re 模块使 Python 语言拥有全部的正则表达式功能。 模块re中一些重...

2019-03-06 10:15:32 3479

原创 python基础(shelve模块)

如何将数据存储到文件中,如果需要的是简单的存储方案,模块shelve可替你完成大部分工作——你只需提供一个文件名即可。对于模块shelve,你唯一感兴趣的是函数open。这个函数将一个文件名作为参数,并返回一个Shelf对象,供你用来存储数据。你可像操作普通字典那样操作它(只是键必须为字符串),操作完毕(并将所做的修改存盘)时,可调用其方法close。该模块作用用于创建永久性映射,其内容存储在使用...

2019-03-06 08:28:02 1823 1

原创 python基础(random随机模块)

random模块模块random包含生成伪随机数的函数,有助于编写模拟程序或生成随机输出的程序。请注意,虽然这些函数生成的数字好像是完全随机的,但它们背后的系统是可预测的。如果你要求真正的随机(如用于加密或实现与安全相关的功能),应考虑使用模块os中的函数urandom。模块random中的SystemRandom类基于的功能与urandom类似,可提供接近于真正随机的数据。 ...

2019-03-05 19:31:44 3952

原创 python基础(time时间模块)

time模块import time模块time包含用于获取当前时间、操作时间和日期、从字符串中读取日期、将日期格式化为字符串的函数。日期可表示为实数(从“新纪元”1月1日0时起过去的秒数。“新纪元”是一个随平台而异的年份,在UNIX中为1970年),也可表示为包含9个整数的元组。下表解释了这些整数。例如,元组(2008, 1, 21, 12, 2, 56, 0, 21, 0)表示2008年1...

2019-03-05 18:41:16 7545

原创 python基础(deque双端队列)

双端队列在需要按添加元素的顺序进行删除时,双端队列很有用。在模块collections中,包含类型deque以及其他几个集合(collection)类型。与集合(set)一样,双端队列也是从可迭代对象创建的,它包含多个很有用的方法。A=deque([]) #创建一个空的双队列 A.append(n) #从右边像队列中增加元素 ,n表示增加的元素 A.appendleft(n) #...

2019-03-05 16:40:01 6075

原创 python高级(堆heapq模块)

一种著名的数据结构是堆(heap),它是一种优先队列。优先队列让你能够以任意顺序添加对象,并随时(可能是在两次添加对象之间)找出(并删除)最小的元素。相比于列表方法min,这样做的效率要高得多。实际上,Python没有独立的堆类型,而只有一个包含一些堆操作函数的模块。这个模块名为heapq(其中的q表示队列),它包含6个函数,其中前4个与堆操作直接相关。必须使用列表来表示堆对象本身。 ...

2019-03-05 16:00:08 83059 4

原创 python基础(fileinput模块)

fileinputfileinput模块可以对一个或多个文件中的内容进行迭代、遍历等操作。该模块的input()函数有点类似文件readlines()方法,区别在于:前者是一个迭代对象,即每次只生成一行,需要用for循环迭代。后者是一次性读取所有行。在碰到大文件的读取时,前者无疑效率更高效。用fileinput对文件进行循环遍历,格式化输出,查找、替换等操作,非常方便。...

2019-03-05 15:32:48 2765

原创 python基础(os模块命令)

OS模块方法引入模块:import os getcwd 获取当前的工作目录 chdir 修改当前工作目录 listdir 获取指定文件夹中的所有文件和文件夹组成的列表 mkdir 创建一个目录/文件夹 makedirs...

2019-03-05 12:53:31 1354

原创 python基础(sys、os模块简述)

标准库:一些深受欢迎的模块在Python中,短语“开箱即用”(batteries included)最初是由Frank Stajano提出的,指的是Python丰富的标准库。安装Python后,你就免费获得了大量很有用的模块。1)sys模块模块sys让你能够访问与Python解释器紧密相关的变量和函数,下列表列出了其中的一些。 ...

2019-03-05 11:23:34 10792

原创 python基础(探索模块)

探索模块1)模块包含什么要探索模块,最直接的方式是使用Python解释器进行研究。为此,首先需要将模块导入。假设你听说有一个名为copy的标准模块。>>> import copy没有引发异常,说明确实有这样的模块。但这个模块是做什么用的呢?它都包含些什么呢?1. 使用dir要查明模块包含哪些东西,可使用函数dir,它列出对象的所有属性(对于模块,它列出所有的函数...

2019-03-05 10:16:02 157

原创 python基础(模块和包)

模块1)模块就是程序任何Python程序都可作为模块导入。假设你编写了以下所示的程序,并将其保存在文件hello.py中,这个文件的名称(不包括扩展名.py)将成为模块的名称。# hello.pyprint("Hello, world!")文件的存储位置也很重要。这里假设这个文件存储在目录C:\python(Windows)或~/python(UNIX/macOS)中。要告诉解释器...

2019-03-05 09:13:42 723

原创 python基础(错误和异常处理)

错误和异常处理在python中一共有2种错误:一种是语法错误,另外一种是异常。语法错误语法错误也叫做解析错误,是指python无法正确的识别代码的造成的。根本原因在于人的行为:手残,脑残和眼残的行为。解决方法:按照正确的语法进行书写就没这个错误了!异常异常是指在语法正确的前提下,程序的报错就是异常。它是在程序异常时单独存在的一个对象,可以对其进行获取或其他操作异常的...

2019-03-05 09:01:59 383

原创 python基础(单例模式)

单例设计模式设计模式:设计模式是前人工作的总结和提炼,通常,被人们广泛流传的设计模式都是针对某一特定问题的成熟的解决方案使用设计模式是为了可重用代码、让代码更容易被他人理解,保证代码可靠性单例设计模式:目的--让类创建的对象,在系统中只有唯一的一个实例每一次执行类名()返回的对象,内存地址是相同的单例设计模式的应用场景:音乐播放对象回收站对象打印机对象...

2019-03-04 20:43:53 167

原创 python基础(面向对象(类的装饰器))

类的装饰器基本原理def deco(func): print('==========') return func@deco #test=deco(test)def test(): print('test函数运行') test()def deco(obj): print('==========',obj) #obj是下面定义...

2019-03-04 17:29:09 190

原创 python基础(面向对象(自定义property设置成员属性修饰符))

property()用于设置成员属性的修饰符 格式:成员属性 = property(获取的方法,设置的方法,删除的方法)例子:class Room: # area = Lazy Property('area') @LazyProperty做的事情 def __init__(self, name, width, length): s...

2019-03-04 15:43:35 551 1

原创 python高级(with和上下文管理器(协议))

上下文管理器with语句实际上是一个非常通用的结构,允许你使用所谓的上下文管理器。上下文管理器是支持两个方法的对象:__enter__和__exit__。方法__enter__不接受任何参数,在进入with语句时被调用,其返回值被赋给关键字as后面的变量。方法__exit__接受三个参数:异常类型、异常对象和异常跟踪。它在离开方法时被调用(通过前述参数将引发的异常提供给它)。如果__exit...

2019-03-04 15:02:54 574

原创 python基础(__slots__属性、timeit模块、__call__方法)

__slots__1.__slots__是什么:是一个类变量,变量值可以是列表,元祖,或者可迭代对象,也可以是一个字符串(意味着所有实例只有一个数据属性)2.引子:使用点来访问属性本质就是在访问类或者对象的__dict__属性字典(类的字典是共享的,而每个实例的是独立的)3.为何使用__slots__:字典会占用大量内存,如果你有一个属性很少的类,但是有很多实例,为了节...

2019-03-04 14:58:11 140

原创 python高级(描述符相关的魔术方法)

描述符使用众所周知,python是弱类型语言,即参数的赋值没有类型限制,下面我们通过描述符机制来实现类型限制功能描述符是可以实现大部分Python类特性中的底层魔法,包括@classmethod@staticmethod@property甚至是__slot__属性描述符是很多高级库和框架的重要工具之一,描述符通常是使用到装饰器或者元类的大型框架中的一个组件1 描述符是什么:...

2019-03-04 14:42:35 189

原创 python基础(面向对象设计(静态方法、类方法))

面向对象设计类方法类属性就是针对类对象定义的属性使用赋值语句在class关键字下方可以定义类属性类属性用于记录与这个类相关的特征在程序运行时,类同样会被加载到内存,在python中,类是一个特殊的对象--类对象类对象在内存中只有一份除了封装实例的属性和方法外,类对象还可以拥有自己的属性和方法类方法就是针对类对象定义的方法在类方法内部可以直接访问类属性或者调用其他...

2019-03-04 10:50:05 215

原创 python高级(反射(与属性操作相关的魔术方法))

1 什么是反射反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。2 python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)...

2019-03-04 10:00:48 1123

原创 python高级(类的命名空间(实例化属性)、抽象基类、abc模块(接口继承与归一化设计(工厂方法模式)))

类的命名空间下面两条语句大致等价:def foo(x): return x * xfoo = lambda x: x * x它们都创建一个返回参数平方的函数,并将这个函数关联到变量foo。可以在全局(模块)作用域内定义名称foo,也可以在函数或方法内定义。定义类时情况亦如此:在class语句中定义的代码都是在一个特殊的命名空间(类的命名空间)内执行的,而类的所有成员都可访问这个命名空间...

2019-03-04 09:16:11 323

原创 python基础(生成器)

生成器是一种使用普通函数语法定义的迭代器。生成器创建起来与函数一样简单。下面创建一个将嵌套列表展开的函数。这个函数将一个类似于下面的列表作为参数:nested = [[1, 2], [3, 4], [5]]换而言之,这是一个列表的列表。函数应按顺序提供这些数字,下面是一种解决方案:def flatten(nested): for sublist in nested: ...

2019-03-04 08:54:15 162

原创 python基础(集合)

集合(set)是一个无序的不重复元素序列。可以使用大括号{ }或者set()函数创建集合,注意:创建一个空集合必须用set()而不是{ },因为{ }是用来创建一个空字典。集合与之前列表、元组类似,可以存储多个数据,但是这些数据是不重复的。集合对象还支持交集(intersection),差集(difference)、并集(union)和对称差集(sysmmetric_...

2019-03-01 22:24:43 238

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除