python 快速教程(二)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Python进阶01词典作者:Vamei出处:欢迎转载,也请保留这段声明。谢谢!通过我们的基础教程,我们已经对Python建立了基本概念,也对对象和类有一个相对明确的认识。我们的进阶教程就是对基础教程的进一步拓展,进一步了解Python的细节。希望在进阶教程之后,你可以对Python的基本语法有一个相对全面的认识。之前我们说了,表是Python里的一个类。一个特定的表,比如说nl=[1,3,8],就是这个类的一个对象。我们可以调用这个对象的一些方法,比如nl.append(15)。现在,我们要介绍一个新的类,就是词典(dictionary)。与表相类似,词典也可以储存多个元素。这种可以用来储存多个元素的对象统称为容器(container)。1.基本概念常见的创建词典的方法:dic={'tom':11,'sam':57,'lily':100}printtype(dic)词典和表类似的地方,是包含有多个元素,每个元素以逗号分隔。但词典的元素包含有两部分,键和值,常见的是以字符串来表示键,也可以使用数字或者真值来表示键(不可变的对象可以作为键)。值可以是任意对象。键和值两者一一对应。(实际上,表的元素也可以是任意对象)比如上面的例子中,‘tom’对应11,'sam对应57,'lily'对应100与表不同的是,词典的元素没有顺序。你不能通过下标引用元素。词典是通过键来引用。printdic['tom']dic['tom']=30printdic可以构建一个新的空的词典:dic={}printdic在词典中增添一个新元素的方法:dic['lilei']=99printdic(引用一个新的键,赋予对应的值)2.对dictionary的元素进行循环调用:dic={'lilei':90,'lily':100,'sam':57,'tom':90}forkeyindic:printdic[key]可以看到,在循环中,dict的一个键会提取出来赋予给key变量。通过print的结果,我们可以再次确认,dic中的元素是没有顺序的。3.词典的其它常用方法printdic.keys()#返回dic所有的键printdic.values()#返回dic所有的值printdic.items()#返回dic所有的元素(键值对)dic.clear()#清空dic,dict变为{}另外有一个很常用的用法:deldic['tom']#删除dic的‘tom’元素del是Python中保留的关键字,用于删除对象。与表类似,你可以用len()查询词典中的元素总数。print(len(dic))总结:词典的每个元素是键值对。元素没有顺序。dic={'tom':11,'sam':57,'lily':100}dic['tom']=99forkeyindic:...del,len()Python进阶02文本文件的输入输出作者:Vamei出处:欢迎转载,也请保留这段声明。谢谢!Python具有基本的文本文件读写功能。Python的标准库提供有更丰富的读写功能。文本文件的读写主要通过open()所构建的文件对象来实现。1.打开文件,创建文件对象。f=open(文件名,模式)最常用的模式有:r#只读“w”#写入2.文件对象的方法:读取方法:content=f.read(N)#读取Nbytes的数据content=f.readline()#读取一行content=f.readlines()#读取所有行,储存在表中,每个元素是一行。写入方法:f.write('Ilikeapple')#将'Ilikeapple'写入文件关闭文件:f.close()3.循环读入文件:(该方法已经从Python3中删除,请尽量避免使用)forlineinfile(文件名):printline利用file()函数,我们创建了一个循环对象。在循环中,文件的每一行依次被读取,赋予给line变量。总结:f=open(name,r)line=f.readline()f.write('abc')f.close()Python进阶03模块作者:Vamei出处:欢迎转载,也请保留这段声明。谢谢!我们之前看到了函数和对象。从本质上来说,它们都是为了更好的组织已经有的程序,以方便重复利用。模块(module)也是为了同样的目的。在Python中,一个.py文件就构成一个模块。通过模块,你可以调用其它文件中的程序。1.引入(import)和使用模块我们先写一个first.py文件,内容如下:deflaugh():print'HaHaHaHa'再写一个second.pyimportfirstforiinrange(10):first.laugh()在second.py中,我们并没有定义laugh函数,但通过从first中引入(import),我们就可以直接使用first.py中的laugh函数了。从上面可以看到,引入模块后,我们可以通过模块.对象的方式来调用所想要使用的对象。上面例子中,first为引入的模块,laugh()是我们所引入的对象。此外,还有其它的引入方式,importaasb,fromaimport*,都是处于方便书写的原因,本质上没有差别。2.搜索路径Python会在以下路径中搜索它想要寻找的模块:1.程序所在的文件夹2.标准库的安装路径3.操作系统环境变量PYTHONPATH所包含的路径如果你有自定义的模块,或者下载的模块,可以根据情况放在相应的路径,以便python可以找到。3.模块包可以将功能相似的模块放在同一个文件夹(比如说dir)中,通过importdir.module的方式引入。注意,该文件夹中必须包含一个__init__.py的文件,以便提醒python知道该文件夹为一个模块包。__init__.py可以是一个空文件。总结importmodulemodule.object__init__.pyPython进阶04函数的参数对应作者:Vamei出处:欢迎转载,也请保留这段声明。谢谢!我们已经接触过函数(function)的参数(arguments)传递,当时我们提到,参数是根据位置对应传递的。这一次,我们准备接触更多的参数对应方式。首先,回忆一下根据位置传递:deff(a,b,c):printa,b,cf(1,2,3)在调用f时,1,2,3根据位置分别传递给了a,b,c。1.关键字(keyword)参数传递有时候,我们发现,在写程序时用位置传递会感觉比较死板。关键字传递就是根据每个参数的名字传递值,而不用遵守固定的位置。依然沿用上面f的定义,更改调用方式:f(c=3,b=2,a=1)关键字传递可以和位置传递混用,但位置传递的参数必须在关键字传递的参数之前。f(1,c=3,b=2)2.参数默认值(default)在定义函数的时候,使用形如a=19的方式,可以给参数赋予默认值。如果该参数最终没有被传递值,将使用该默认值。deff(a,b,c=10):printa,b,cf(3,2)f(3,2,1)在第一次调用函数f时,我们并没有足够的值,c没有被赋值,c将使用默认值10.第二次调用函数的时候,c被赋值为1,不再使用默认值。3.包裹(packing)位置传递和包裹关键字传递:在定义函数时,我们有时候并不知道调用的时候会传递多少个函数。这时候,使用包裹位置传递和包裹关键字传递会非常有用。下面是包裹位置传递的例子:deffunc(*name):printtype(name)printnamefunc(1,4,6)func(5,6,7,1,2,3)上面的两次调用,尽管参数的个数不同,依然可以用同一个func定义。原因在于,在func的参数表中,所有的参数被name收集,根据位置合并成一个定值表(tuple),这就是包裹位置传递。为了提醒python参数name是包裹位置传递所用的定值表名,在定义func时,在name前加*号。下面是包裹关键字传递的例子:deffunc(**dict):printtype(dict)printdictfunc(a=1,b=9)func(m=2,n=1,c=11)与上面一个例子类似,dict是一个字典,收集所有的关键字,传递给函数func。为了提醒python参数dict是包裹关键字传递所用的字典,在dict前加**。我们看到,包裹位置传递和包裹关键字传递的关键在于定义函数时,在相应定值表或字典前加*或**。4.解包裹*和**在调用的时候的应用,主要是解包裹(unpacking),下面为例:deffunc(a,b,c):printa,b,cargs=(1,3,4)func(*args)在这个例子中,所谓的解包裹,就是在传递tuple时,让tuple的每一个元素对应一个位置参数。在这里,通过在调用func时使用*,我们提醒python,我想要把args拆成分散的三个元素,分别传递给a,b,c。(设想一下在调用func时,args前面没有*会是什么后果?)相应的,也存在对词典的解包裹,使用相同的func定义,然后:dict={'a':1,'b':2,'c':3}func(**dict)在传递词典dict时,让词典的每个键值对作为一个关键字传递给func。5.混合定义与混合调用参数的几种传递方式可以混合定义和混合调用。但在过程中要小心前后顺序。基本原则是,先位置,再关键字,再包裹位置,再包裹关键字,并且根据上面所说的原理细细分辨。注意:本讲的内容,请注意定义时使用和调用时使用的区分。包裹和解包裹并不是相反操作,而是两个相对独立的过程。总结:关键字,默认值,包裹位置,包裹关键字解包裹Python进阶05循环设计作者:Vamei出处:欢迎转载,也请保留这段声明。谢谢!之前在“循环”一节,我们已经讨论了Python最基本的循环语法。这一节,我们将接触更加灵活的循环方式。1.利用range(),得到下标在Python中,for循环后的in跟随一个序列的话,循环每次使用的序列元素,而不是序列的下标。之前我们已经使用过range来控制for循环。现在,我们继续开发range的功能,以实现下标对循环的控制:S='abcdefghijk'foriinrange(0,len(S),2):printS[i]在该例子中,我们利用len()函数和range()函数,用i作为S序列的下标来控制循环。在range函数中,分别定义上限,下限和每次循环的步长。这就和C语言中的for循环相类似了。2.利用enumerate(),同时得到下标和元素利用enumerate()函数,可以在每次循环中同时得到下标和元素:S='abcdefghijk'for(index,char)inenumerate(S):printindexprintchar实际上,enumerate()在每次循环中,返回的是一个包含两个元素的定值表(tuple),两个元素分别赋予index和char3.利用zip(),实现并行循环如果你多个等长的序列,然后想要每次循环时从各个序列分别取出一个元素,可以利用zip()方便地实现:ta=[1,2,3]tb=[9,8,7]tc=['a','b','c']for(a,b,c)inzip(ta,tb,tc):printa,b,c实际上,zip()在每次循环时,从各个序列分别从左到右取出一个元素,合并成一个tuple,然后tuple的元素赋予给a,b,c总结:range()enumerate()zip()Python进阶06循环对象作者:Vamei出处:欢迎转载,也请保留这段声明。谢谢!通过

1 / 46
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功