
python高级(一)
旅立の涯秸
这个作者很懒,什么都没留下…
展开
-
python高级(内置函数、数学模块、复数)
乘方运算符(**)来执行幂运算。实际上,可不使用这个运算符,而使用函数pow。>>> 2 ** 3 8 >>> pow(2, 3) 8像前一个示例那样使用函数称为调用函数:你向它提供实参(这里是2和3),而它返回一个值。鉴于函数调用返回一个值,因此它们也是表达式。实际上,你可结合使用函数调用和运算符来编写更复杂的表达式(就像前面使用函数int时那样)...原创 2019-02-22 09:57:44 · 2223 阅读 · 0 评论 -
python高级(如何使用生成器函数实现可迭代对象)
案列:某软件要求,从网络抓取各个城市气温信息,并依次显示:北京:15-20天津:17-22长春:12-18..........如果一次抓取所有城市气温再显示,显示第一个城市气温时,有很高的延时,并且浪费存储空间。我们期望以'用时访问'的策略,并且能把所有城市气温封装到一个对象里,可用for语句进行进行迭代,如何解决?import requestsfrom collec...原创 2019-03-07 09:58:20 · 641 阅读 · 0 评论 -
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 · 619 阅读 · 0 评论 -
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 · 232 阅读 · 0 评论 -
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 · 2413 阅读 · 0 评论 -
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 · 345 阅读 · 1 评论 -
python高级(如何创建可管理的对象属性(设置property成员属性修饰符))
案例:在面向对象编程中,我们把方法(函数)看作对象的接口。直接访问对象的属性可能是不安全的,或设计上不够灵活。但是使用调用方法在形式上不如访问属性简洁。circle.setRadius(5.0) #繁circle.radius = 5.0能否在形式上是属性访问,但实际上调用方法?使用property函数为类创建可管理属性,fget/fset/fdel对应相应属性访问...原创 2019-03-07 16:24:06 · 457 阅读 · 0 评论 -
python基础(如何让类支持比较操作)
案例:有时我们希望自定义的类,实例间可以使用<,<=,>,>=,==,!=符号进行比较,我们自定义比较的行为。例如:有一个矩形的类,我们希望比较两个矩形的实例时,比较的是他们的面积。比较符号运算符重载,需要实现以下方法:__lt__,__le__,__gt__,__ge__,__eq__,__ne__使用标准库下的functools下的类装饰器total_o...原创 2019-03-07 18:34:55 · 356 阅读 · 0 评论 -
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 · 669 阅读 · 0 评论 -
python高级(如何在环状数据结构中管理内存)
在python中,垃圾回收器通过引用计数来回收垃圾对象,但某些环状数据结构(树,图....),存在对象间的循环引用,比如树的父节点引用子节点,子节点也同时引用父节点。此时同时del掉引用父子节点,两个对象不能被立即回收。如何解决此类的内存管理内存管理问题?使用标准库weakref,它可以创建一种能访问对象但不增加引用计数的对象。import weakref,sysclass Da...原创 2019-03-07 20:14:21 · 450 阅读 · 0 评论 -
python基础(面向对象(自定义property设置成员属性修饰符))
property()用于设置成员属性的修饰符 格式:成员属性 = property(获取的方法,设置的方法,删除的方法)例子:class Room: # area = Lazy Property('area') @LazyProperty做的事情 def __init__(self, name, width, length): s...原创 2019-03-04 15:43:35 · 615 阅读 · 1 评论 -
python高级(with和上下文管理器(协议))
上下文管理器with语句实际上是一个非常通用的结构,允许你使用所谓的上下文管理器。上下文管理器是支持两个方法的对象:__enter__和__exit__。方法__enter__不接受任何参数,在进入with语句时被调用,其返回值被赋给关键字as后面的变量。方法__exit__接受三个参数:异常类型、异常对象和异常跟踪。它在离开方法时被调用(通过前述参数将引发的异常提供给它)。如果__exit...原创 2019-03-04 15:02:54 · 634 阅读 · 0 评论 -
python高级(描述符相关的魔术方法)
描述符使用众所周知,python是弱类型语言,即参数的赋值没有类型限制,下面我们通过描述符机制来实现类型限制功能描述符是可以实现大部分Python类特性中的底层魔法,包括@classmethod@staticmethod@property甚至是__slot__属性描述符是很多高级库和框架的重要工具之一,描述符通常是使用到装饰器或者元类的大型框架中的一个组件1 描述符是什么:...原创 2019-03-04 14:42:35 · 228 阅读 · 0 评论 -
python高级(如何让字典保持有序)
案例:某编程竞赛系统,对参赛选手编程解题进行计时,选手完成题目后,把该选手解题用时记录到字典中,以便赛后按选手名查询成绩。(答题用时越短,成绩越优){'LiLei':(2,43),'HanMeimei':(5,52),'jim':(1,39)...}比赛结束后,需按排名顺序依次打印选手成绩,如何实现?from time import timefrom random import ...原创 2019-02-27 16:40:07 · 2205 阅读 · 0 评论 -
python高级(如何实现用户的历史记录功能)
很多应用程序都有浏览用户的历史记录功能,例如浏览器可以查看最近访问过的网页视频播放器可以查看最近播放过的视频shell可以查看用户输入过的命令制作一个简单的猜数字小游戏,添加历史功能记录,显示用户最近猜过的数字,如何实现?from random import randintfrom collections import deque #从collections标准库中导入d...原创 2019-02-28 19:43:04 · 1939 阅读 · 0 评论 -
python高级(堆heapq模块)
一种著名的数据结构是堆(heap),它是一种优先队列。优先队列让你能够以任意顺序添加对象,并随时(可能是在两次添加对象之间)找出(并删除)最小的元素。相比于列表方法min,这样做的效率要高得多。实际上,Python没有独立的堆类型,而只有一个包含一些堆操作函数的模块。这个模块名为heapq(其中的q表示队列),它包含6个函数,其中前4个与堆操作直接相关。必须使用列表来表示堆对象本身。 ...原创 2019-03-05 16:00:08 · 83312 阅读 · 4 评论 -
python高级(迭代器、迭代工具)
Python提供了多个可帮助迭代序列(或其他可迭代对象)的函数,其中一些位于模块itertools中,但还有一些内置函数使用起来也很方便。1. 并行迭代有时候,你可能想同时迭代两个序列。假设有下面两个列表:names = ['anne', 'beth', 'george', 'damon']ages = [12, 45, 32, 102]如果要打印名字和对应的年龄,可以像下面...原创 2019-02-26 15:57:17 · 603 阅读 · 0 评论 -
python高级(如何在列表,字典,集合中根据条件筛选数据)
列表1)遍历列表中每一项元素,对每一项元素进行判断,筛选符合的数据加入到新列表中data = [1,5,-3,-2,6,0,9]res = []for x in data: if x >= 0: res.append(x)print(res)2)列表推导式[x for x in data if x >= 0]3)利用fil...原创 2019-02-27 09:36:06 · 2058 阅读 · 0 评论 -
python高级(如何为元组中的每个元素命名,提高程序可读性)
案列:学生信息系统中数据为固定格式:(名字,年龄,性别,邮箱地址,...)学生数量很大为了减少存储开销,对每个学生信息用元组表示:('jim',16,'male','jim@gmail.com')('LiLei',17,'male','leile@qq.com')('Lucy',16,'female','lucy123@yahoo.com')访问时,如果使用索引(ind...原创 2019-02-27 10:23:16 · 240 阅读 · 0 评论 -
python高级(类的命名空间(实例化属性)、抽象基类、abc模块(接口继承与归一化设计(工厂方法模式)))
类的命名空间下面两条语句大致等价:def foo(x): return x * xfoo = lambda x: x * x它们都创建一个返回参数平方的函数,并将这个函数关联到变量foo。可以在全局(模块)作用域内定义名称foo,也可以在函数或方法内定义。定义类时情况亦如此:在class语句中定义的代码都是在一个特殊的命名空间(类的命名空间)内执行的,而类的所有成员都可访问这个命名空间...原创 2019-03-04 09:16:11 · 375 阅读 · 0 评论 -
python高级(反射(与属性操作相关的魔术方法))
1 什么是反射反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。2 python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)...原创 2019-03-04 10:00:48 · 1177 阅读 · 0 评论 -
python高级(元类、自定义元类)
什么是元类(metaclass)?元类是类的类,是类的模板元类的实例为类,正如类的实例为对象class Foo: passt1=Foo() #t1是通过Foo类实例化的对象print(type(f1))print(type(Foo))所有的对象都是实例化或者说调用类而得到的(调用类的过程称为类的实例化),比如对象t1是调用FOO类得到的一个实例。如果一切皆为...原创 2019-03-06 22:33:06 · 5124 阅读 · 1 评论 -
python高级(如何实现属性可修改的函数装饰器)
案例:为分析程序内哪些函数执行时间开销较大,我们定义一个带timeout参数的函数装饰器。装饰功能如下:1.统计被装饰函数单次调用运行时间。2.时间大于参数timeout的,将此次函数调用记录到log日志当中。3.运行时间可修改timeout的值。为包裹函数增添一个函数,用来修改闭包中使用的自由变量。在python3中,使用nonlocal访问嵌套作用域中的变量引用f...原创 2019-03-08 10:32:47 · 639 阅读 · 0 评论