
轻松python
文章平均质量分 63
以小游戏为基础,来阐述python的知识点
学习python应该是快乐的,不应该是语法的罗列
李灵晖
正走在技术道路上的求知者
展开
-
零基础学python-19.12 总结列表解析与字典解析
这一章节我们来总结一下列表解析与字典解析的语法。1.列表解析(1){1,2,3}等同于set([1,2,3])>>> aList={1,2,3}>>> bList=set((1,2,3))>>> aList is bListFalse>>> aList==bListTrue>>> (2)列表解析就是使用set函数强迫生成器表达式生产所有值>>> aList={x for x原创 2015-10-18 23:02:59 · 4815 阅读 · 2 评论 -
零基础学python-19.11 使用迭代工具模拟map
这一章节我们来讨论一下使用迭代工具模拟map。在讨论之前,我们先看一些例子:>>> list(zip([1,2,3],[4,5,6,7]))[(1, 4), (2, 5), (3, 6)]>>> list(zip('abcdef','gh'))[('a', 'g'), ('b', 'h')]>>> list(zip([1,2,3]))[(1,), (2,), (3,)]>>>原创 2015-10-09 17:05:00 · 1372 阅读 · 0 评论 -
零基础学python-19.10 生成器是单迭代器
这一章节我们来结束一下生成器是单迭代器,而不是多迭代器。我们在之前的章节已经提到过迭代器iter,他是支持多迭代器的例如:>>> string='abcde'>>> iter1=iter(string)>>> next(iter1)'a'>>> iter2=iter(string)>>> next(iter2)'a'>>> next(iter1)'b'>>> next原创 2015-10-05 21:11:52 · 1613 阅读 · 0 评论 -
零基础学python-19.9 生成器函数与生成器表达式
这一章节主要讨论生成器函数与生成器表达式的联系与区别。1.联系* 两者之间都是返回生成器。下面是示例代码>>> g=(x for x in range(5))>>> g at 0x01E673F0>>>> >>> def test(): for x in range(5): yield x >>> test()>>> * 两者都支持手动迭代原创 2015-10-02 22:16:47 · 1525 阅读 · 0 评论 -
零基础学python-19.8 生成器表达式:当迭代器遇上列表解析
这一章节我们来讨论一下生成器表达式。从语法上来讲,生成器表达式跟列表解析一个样,只不过列表解析放在中括号里面,而生成器表达式放在小括号里面>>> [x for x in range(5)][0, 1, 2, 3, 4]>>> (x for x in range(5)) at 0x01E5F3A0>>>> list(x for x in range(5))[0, 1, 2原创 2015-10-02 16:18:28 · 5277 阅读 · 0 评论 -
零基础学python-19.7 扩展生成器函数
这一章节我们来讨论一下扩展生成器函数:send函数回顾一下上一章节我们介绍yield的应用:>>> def test(): for x in range(3): yield x >>> x=test()>>> next(x)0>>> next(x)1我们这一章节在next()和__next__()之外,再介绍一个函数send,他主要的作用就是跟生成器通信,并且返回原创 2015-10-01 23:52:05 · 1879 阅读 · 0 评论 -
零基础学python-19.6 生成器函数应用
这一章节我们来讨论一下生成器函数应用。先定义一个生成器函数:>>> def test(): for x in range(3): yield x >>> test()从上面的代码可以看见,函数test返回的是一个生成器,然后当生成器产生一个结果之后,控制权就会返回给函数,然后系统会记录函数当前的状态(作用域与变量)下面,我们来看看执行代码:>>> def tes原创 2015-10-01 23:18:56 · 1951 阅读 · 0 评论 -
零基础学python-19.5 重访迭代器:生成器yield
这一章节我们来讨论一些生成器yield1.yield的特性:延迟结果创建* 生成器函数:也是使用def定义,但是使用yield返回,而且每次返回只是返回一个结果,在每次产生结果之间挂起和继续它们的状态(就是当返回有三个结果,第一个结果返回了,但是第二个结果没有返回,但是由于是yield,它记录下返回第一个结果时所有作用域以及变量的状态,因此,在当需要返回第二个结果的时候,它将会继续刚才的状原创 2015-09-25 15:03:11 · 2086 阅读 · 2 评论 -
零基础学python-19.4 为什么要在意列表解析与序列映射函数map
这一章节我们来讨论一下为什么要在意列表解析与序列映射函数map,也就是为什么要有前面的几个章节?答案:就是对于迭代序列,每一个序列的对象只进行一种操作,它能够提供精简的代码我们下面举两个例子:1.去掉每一行的换行符>>> [item for item in open('output_file.txt')]['aaaaa\n', 'bbbbb\n', 'accccc\n',原创 2015-09-24 15:49:36 · 1945 阅读 · 2 评论 -
零基础学python-19.3 列表解析与矩阵
这一章节我们来讨论一下列表解析与矩阵1.矩阵矩阵(Matrix)是指纵横排列的二维数据表格我们先从idle里面顶一个两个矩阵>>> M=[ [1,2,3], [2,3,4], [3,4,5] ]>>> N=[ [5,6,7], [-2,-3,-4], [13,14,15] ]>>> 从上面来看,列表嵌套列表暂时成为一个矩阵,根据列表的特性,我们总是可原创 2015-09-23 23:04:50 · 2287 阅读 · 0 评论 -
零基础学python-19.1 列表解析与序列映射函数map
上一章节我们说了map的特性,这一章节我们结合列表解析与map,一起讨论一下它们的应用。 我们下面举一些例子来看一下。场景1:将字符串每个字符转换为ascii码 当我们看到上面的情景,一般首先会想到for,我们下面先用for来实现。 我们转换ascii码的函数是ord()>>> ord('a')9712我们下面来转换字符串“abcde”>>> string='a原创 2015-09-23 14:11:05 · 2370 阅读 · 0 评论 -
零基础学python-19.2 列表解析与序列映射函数map(2)增加分支测试与嵌套循环
这一章节我们继续来深入讨论一下python的列表解析与map,这一次我们增加了分支测试与嵌套循环,下面让我们来看看一些例子:分支测试(if)场景1:选出列表里面的偶数第一种我们使用函数的形式来实现>>> aList=[1,2,3,4,5]>>> def test(aList): res=[] for x in range(len(aList)):原创 2015-09-23 14:17:53 · 1998 阅读 · 0 评论 -
零基础学python-18.10 函数式编程工具:filter和reduce
这一章节我们来讨论一下函数式编程工具:filter和reduce1.filterfilter主要用于过滤序列的某些对象>>> def test(x): if x>0: return x >>> list(filter(test,range(-5,5)))[1, 2, 3, 4]>>> 上面是filter联合def函数,过滤列表小于0的对象我们使用lambda表原创 2015-09-21 23:22:59 · 1846 阅读 · 0 评论 -
零基础学python-18.9 序列映射函数:map
这一章节我们来讨论一些序列映射函数:mapmap函数,就是引入一个函数,然后对序列(字符串、列表、字典等)的每一个对象进行操作1.场景: 对序列的所有对象分别加1一般我们会先想到使用循环for:>>> aList=[1,2,3,4,5]>>> def add(aList): for x in range(len(aList)): aList[x]+=1原创 2015-09-21 17:16:20 · 3669 阅读 · 0 评论 -
零基础学python-18.8 嵌套lambda与作用域
这一章节我们来讨论一下嵌套lambda与作用域我们在前面的章节已经涉及到一些作用域与lambda表达式,例如:>>> def test(N): return lambda x:x*N>>> func=test(2)>>> func(2)4>>> 上面的代码就是lambda表达获取test的参数N,即便test已经不是激活状态我们下面将使用纯lambda表原创 2015-09-20 23:26:33 · 4800 阅读 · 0 评论 -
零基础学python-18.7 为什么要使用lambda表达式
这一章节我们来讨论一下为什么要使用lambda表达式主要的目的就是提供一个更加简洁的代码结构,但是对于初学者,它可能反而增加阅读的难度lambda通常应用在行为调整表,也就是行为的列表或者字典,能够按照需求执行不同的代码。>>> aList=[lambda x:x**2,lambda x:x**3,lambda x:x**4]#list里面是三种幂算法>>> for func in原创 2015-09-20 20:44:59 · 2084 阅读 · 0 评论 -
零基础学python-18.6 lambda表达式快速入门
这一章节我们来简单讨论lambda表达式作为入门在python里面,除了def定义函数外,它还提供另外一种形式来完成函数能够做的事情,就是lambda表达式。1.lambda表达式的表现形式:lambda arg1,arg2....argN:expression using args>>> func=lambda x,y,z :x+y+z>>> func(1,2,3)6原创 2015-09-20 20:07:47 · 1550 阅读 · 0 评论 -
零基础学python-18.5 函数的内建工具与函数的属性
这一章节我们来讨论python函数的另外两个方面:函数的内建工具与函数的属性1.函数的内建工具函数作为是对象,他也可以使用内建函数来管理,例如:>>> def test(): pass>>> test.__name__'test'>>> dir(test)['__annotations__', '__call__', '__class__', '__closur原创 2015-09-19 22:20:54 · 1861 阅读 · 0 评论 -
零基础学python-18.4 函数对象:间接调用函数
这一章节我们来讨论一下函数对象的其中一个方面:间接调用函数在讨论之前,我们先来说一下函数为什么是对象?因为在python的定义里面,他所有都是对象,所以函数也是对象,在执行的时候已经存在内存空间里面的>>> def test(a): print(a) >>> id(test)31897400>>> >>> def test(a): print(a)原创 2015-09-18 23:35:39 · 2888 阅读 · 0 评论 -
零基础学python-18.3 递归函数vs循环和递归处理任意结构
这一章节我们来讨论两个话题:递归函数vs循环和递归处理任意结构1.递归函数vs循环再次沿用上一章节的递归代码:>>> def test (aList): if not aList: return 0 else : return aList[0]+test(aList[1:]) >>> a=[1,2,3,4,5]>>> test(a)15同时,我们也用循环实现上原创 2015-09-18 17:06:57 · 2979 阅读 · 0 评论 -
零基础学python-18.2 递归函数与分解递归函数的执行步骤
这一章节我们来讨论一下递归函数,一个经常避免使用的,但又不得不学会的函数递归函数:函数Func(Type a,……)直接或间接调用函数本身,则该函数称为递归函数我下面给出一个例子:>>> def test(x): print(x) if not x: return 0 else : return x[0]+test(x[1:]) >>> test([原创 2015-09-17 22:58:03 · 2413 阅读 · 0 评论 -
零基础学python-18.1 函数的设计
这一章节我们来讨论一下函数的设计的一些习惯:1.耦合性:输入使用参数,输出使用return推荐方式:>>> def test(x): print(x) return x+1>>> a=1>>> test(a)12>>> 反面教程:>>> a=1>>> def test(): global a a=a+2 >>> test()>>> a3>>>原创 2015-09-17 10:54:49 · 1804 阅读 · 0 评论 -
零基础学python-17.4 参数匹配应用实例
这一章节我们来说明一下参数匹配的应用实例我们下面以求对象最小值min函数为例子说明:>>> def minTest(*args): res=args[0] for item in args[1:]: if item < res: res=item return res>>> minTest(1,2,3,4)1>>> minTest(5,3,4.6,原创 2015-09-16 22:41:03 · 1940 阅读 · 0 评论 -
零基础学python-17.3 特定的参数匹配模型快速入门
这一章节我们来讨论一下特定的参数匹配模型快速入门的基础知识在讨论语法细节前我需强调一下,一般来说我们都不需要用到这种匹配模型,这里只是简单的介绍一下1.位置:从左到右进行匹配>>> def test(a,b,c): print(a,b,c) >>> a=1>>> b=2>>> c=3>>> test(a,b,c)1 2 3>>> 2.关原创 2015-09-16 22:15:09 · 1956 阅读 · 0 评论 -
零基础学python-17.2 参数与共享引用
这一章节我们来讨论一下参数与共享引用承接上一章节所说的参数的传递是通过自动将对象赋值给本地变量名来实现的,其本质就是复制引用,传递对象1.我们下面以传递不可变对象为例子:>>> b=1>>> def test(x): print(x) print(id(x)) x=2 print(x) print(id(x)) >>> test(b)14977340962原创 2015-09-16 08:59:41 · 1838 阅读 · 0 评论 -
零基础学python-17.1 参数的传递快速入门
这一章节我们来讨论一下参数的传递1.参数的传递是通过自动将对象赋值给本地变量名来实现的>>> x=1>>> def test(param): print(param) print(id(param)) >>> id(x)505991632>>> test(x)1505991632>>> y='abc d'>>> id(y)31887488原创 2015-09-15 23:21:18 · 1652 阅读 · 0 评论 -
零基础学python-16.7 nonlocal介绍
这一章节我们来讨论一些nonlocal1.nonlocal简介nonlocal与global相似,但是它只是作用于嵌套作用域,而且只是作用在函数里面>>> def test(): x=1 print("test:"+str(x)) def test2(): nonlocal x x=3 print("test2:"+str(x)) class a: nonloc原创 2015-09-15 12:47:49 · 4105 阅读 · 0 评论 -
零基础学python-16.6 嵌套作用域
这一章节我们来讨论一下嵌套作用域1.简介例子:>>> x=1>>> def test()SyntaxError: invalid syntax>>> def test(): x=2 def test2(): print(x) test2() print(x) >>> test()22>>> x1>>> 从上面的例原创 2015-09-14 23:52:50 · 2152 阅读 · 0 评论 -
零基础学python-16.5 模块间全局变量的修改以及其他访问全局变量的方法
这一章节我们来讨论一下python里面模块间全局变量的修改以及其他访问全局变量的方法1.模块间全局变量的修改x=1#全局变量,其实就是模块里面所有的函数都可以使用def test(): print(x)if __name__=='__main__': test()上面的代码保存为test.pyimport testif __原创 2015-09-14 12:58:20 · 5262 阅读 · 0 评论 -
零基础学python-16.4 global作用域
这一章节我们来讨论一下global作用域global的本质:不是声明变量类型,而是声明命名空间也就是作用域1.全局变量总结:1)它位与模块文件内部的顶层我们打开test.py模块,里面只有一句,就是下面的一句x=1#全局变量,其实就是模块里面所有的函数都可以使用2)在函数内部不声明也可以使用我们在test.py文件里面加一点代码x=1#全局变量,其实就是模块里面原创 2015-09-14 12:37:14 · 2109 阅读 · 0 评论 -
零基础学python-16.3 变量名解析:LEGB原则
这一章节我们来说说变量名解析的原则:LEGB原则1.当函数使用未认证的变量名时,python搜索4个作用域,本地作用域(L)->上一层结构中def或者lambda的本地作用域(E)->全局作用域(G)>内置作用域(B),并且在第一次找到这个变量名的地方停下来2.函数给一个变量赋值的时候,总是创建或者改变本地作用域的变量名,除法他是声明为全局>>> def test(): x=原创 2015-09-13 08:03:23 · 2204 阅读 · 0 评论 -
零基础学python-16.2 作用域法则
作用域法则:1.模块中定义的顶级变量,作用域是整个模块def test(): print(id(x)) print(x)def test2(): print(x)if __name__=='__main__': x=100000 test() test2()我们把上面的代码保存为test.py原创 2015-09-12 23:23:50 · 1649 阅读 · 0 评论 -
零基础学python-16.1 作用域快速入门
这一章节我们来聊聊作用域基础python在创建、改变或者查找变量都是在所谓的命名空间中进行,作用域指的就是命名空间简单的说:就是这个变量可以被访问的范围我们举一个比较容易理解的例子--函数>>> def test(): x=1 print(x) >>> xTraceback (most recent call last): File "", line 1, in原创 2015-09-12 09:26:56 · 1657 阅读 · 0 评论 -
零基础学python-15.4 函数的多态vs对象的多态
这一章节我觉得有必要再来谈一下函数的多态1.函数的多态指的是函数根据参数的不同而进行不同的运算>>> def times(x,y): return x*y>>> times(2,3)6>>> times('ray',3)'rayrayray'>>> 我们再来引用昨天的代码,所谓函数的多态,指的是函数会根据参数类型的变化,而且做出不同的运算例如上面原创 2015-09-11 22:39:27 · 2354 阅读 · 0 评论 -
零基础学python-15.3 函数的定义、调用与多态
1.函数的定义>>> def times(x,y): return x*y2.函数的调用>>> def times(x,y): return x*y>>> times(2,3)63.函数的多态>>> def times(x,y): return x*y>>> times(2,3)6>>> times('ray',3)'rayrayray'>>>原创 2015-09-10 22:50:33 · 1888 阅读 · 0 评论 -
零基础学python-15.2 分解函数
这一章节我们来说说函数的一些主要概念我们以一小段代码为例:>>> def test(): pass>>> * def是可执行的代码>>> test()>>> 我们调用test方法,尽管什么都没有,但是test已经执行了* def创建了一个对象并将其赋值给某一变量其实python将pass这个代码封装成一个对象,然后赋值给test这个变量,主要调用这个变量有些原创 2015-09-10 22:39:30 · 1557 阅读 · 0 评论 -
零基础学python-15.1 为什么需要编写函数
1.为什么需要函数?1)最大化的代码重用和最小化的代码冗余我们下面举一个简单例子:加法>>> a=1>>> b=1>>> c=a+b>>> c2>>> d=1>>> f=1>>> e=d+f>>> e2从上面的代码我们看见,如果要做多次加法,那么需要写一大段的代码,但是如果我们把加法写成函数:>>> def add(x,y): return x+y>>>原创 2015-09-10 12:42:04 · 1887 阅读 · 1 评论 -
零基础学python-14.3 python的文档资源:help函数
python除了提供__doc__来查询文档字符串,还提供另外的一种方法来查询文档字符串:help下面是我们自己建立的一个类,使用help打印,形成相关的报表信息>>> class Test(): '这是一个测试类' def helloworld(): '测试方法' print('hello world') >>> help(Test)Help on class Te原创 2015-09-10 09:48:14 · 1819 阅读 · 2 评论 -
零基础学python-14.2 python的文档资源:文档字符串
这一章节我们来说说文档字符串:__doc__文档字符串其实也是注释的一种,但是它一般放在模块文件、函数或者类语句的顶部,主要用来说明它们是干什么的,为什么这样做python会自动封装这些文字,放到__doc__属性里面>>> def test(): '这是一个测试方法' print('hello world')>>> test.__doc__'这是一个测试方法'>>>原创 2015-09-10 09:36:37 · 2035 阅读 · 1 评论 -
零基础学python-14.1 python的文档资源:注释和dir()
1.文档资源列表形式角色#注释文件中的文档dir函数对象中可用属性列表文档字符串:__doc__附近在对象上的文档pydoc:help()对象的交互帮助pydoc:html报表浏览器中的模块文档标准手册正式的语音和库的说明网站资源在线教程、例子等出版的原创 2015-09-10 09:23:23 · 1821 阅读 · 1 评论