一.预备知识 学习装饰器需理解以下预备知识: 函数即变量 函数本质上也是一种变量,函数名即变量名,函数体就变量对应的值:函数体可以作为值赋给其他变量(函数),也可以通过函数名来直接调用函数.调用符号即(). 嵌套函数 函数内部可以嵌套定义一层或多层函数,被嵌套的内部函数可以在外层函数体内部调用,也可以作为返回值直接返回 闭包 在一个嵌套函数中,内部被嵌套的函数可以调用外部函数非全局变量并且不受外部函数声明周期的影响(即可以把外部函数非全局变量视为全局变量直接调用). 高阶函数 把一个函数作为参数…
这篇文章主要介绍 Python 中几个常用的高级特性,用好这几个特性可以让自己的代码更加 Pythonnic 哦 1.生成器 什么是生成器呢?简单来说,在 Python 中一边循环一边计算的机制称为 生成器(generator) 生成器最大的优点在于它支持延迟操作,所谓的延迟操作是指在需要的时候才进行运算产生结果 我们可以使用以下两种方法 创建生成器: 生成器表达式 类似于列表生成式,只需将列表生成式中的中括号替换成圆括号即可 >>> gen = (item for item in ra…
1.生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万  个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪  费了. 所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创  建完整的list,从而节省大量的空间.在Python中,这种一边循环一边计算的机制,称为生成器:generator. 要创建一个generat…
一.切片 1.定义: 经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符. 2.语法: A[1:3] 取出1到3,都是正数的情况下,缺填的为0(第一个),end(最后一个) B[-3:] 取出倒数第三个到倒数第一个,都是负数的情况下,缺填的为-1(最后一个) C[1:10:2] 从1到10,每2个取一个 跟matlab差不多的语法,就是对一个向量可以进行矩阵操作.可以对List.tuple,string,dict,set等使用 二.切片 1.定义: 如果给…
由于字符串也是可迭代对象,因此,也可以作用于for循环: >>> for ch in 'ABC': ... print ch ... A B C 所以,当我们使用for循环时,只要作用于一个可迭代对象,for循环就可以正常运行,而我们不太关心该对象究竟是list还是其他数据类型. 那么,如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断: >>> from collections import Iterable >>…
1.函数 函数定义 def  func(aa):         def:表示函数的关键字  func:函数名,即函数的名称,可根据函数名调用函数 print('.....')        print()..等等:函数体,函数中进行一系列的逻辑计算 pass                  aa:参数,为函数体提供数据 return 3            return:返回值,当函数执行完毕后,可以给调用者返回数据 func()                   执行函数 func('…
一.习题讲解 1.写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组.例如:[(‘红心’,2), (‘草花’,2), …(‘黑桃,‘A’)] def cards(): num=[] for v in range(2,11): num.append(v) num.extend(['J','Q','K','A']) type=['红心','草花','方块','黑桃'] result=[] for i in num: for j in type: result.append((j,i)) re…
迭代器 __iter__方法返回一个迭代器,它是具有__next__方法的对象.在调用__next__方法时,迭代器会返回它的下一个值,若__next__方法调用迭代器 没有值返回,就会引发一个StopIteration异常.    特点: 访问者不需要关心迭代器内部的结构,仅需通过__next__方法不断去取下一个内容 不能随机访问集合中的某个值 ,只能从头到尾依次访问 访问到一半时不能往回退 便于循环比较大的数据集合,节省内存 name = iter(['koka','lolo','lala…
1.迭代器 迭代器是访问集合的一种方式,迭代对象从集合的第一个元素开始访问,直到元素被访问结束,迭代器只能往前不能后退,最大的优点是不要求事先准备好整个迭代过程中的元素,这个特点使得它特别适合用于遍历一些巨大的或是无限的集合. 特点: 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容 不能随机访问集合中的某个值,只能从头到尾依次访问 访问到一半时不能往回退 便于循环比较大的数据集合,节省内存 使用: #生成迭代器: name = iter(['d','c','b','…
无论是类还是实例,一切皆是对象. Python是强动态语言,和java在这点上有所不同. class Ab(): a = 666 # 定义类对象Ab,自带属性a,值为666 # 使用Ab.__dict__可以查看类Ab的属性 us1 = Ab() us2 = Ab() # 定义两个实例对象us1.us2,这两个实例自身并不具备任何属性 # 只有在__init__中定义了self.arg=xxx的情况下,实例默认会具备arg属性 动态语言中,属性自带操作方法:获取(读).设置(写):还可以定义删除…