Python 爬虫基础与实战 课件 第1章 Python爬虫应用基础_第1页
Python 爬虫基础与实战 课件 第1章 Python爬虫应用基础_第2页
Python 爬虫基础与实战 课件 第1章 Python爬虫应用基础_第3页
Python 爬虫基础与实战 课件 第1章 Python爬虫应用基础_第4页
Python 爬虫基础与实战 课件 第1章 Python爬虫应用基础_第5页
已阅读5页,还剩99页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章Python爬虫应用基础

数1.1Python3的安装与开发环境配置1.2Python3的基础1.3Python序列应用1.4Python中的函数1.5模块1.6面向对象1.7文件和异常1.8迭代器与生成器第一步首先是安装Python3。相关链接如下:官方网站:下载地址:https:///downloads/第三方库:/官方文档:/3/中文教程:/python3/python3-tutorial.html1.Python自带开发环境打开IDLE使用cmd打开Python3.8(64-bit)

1.Python自带开发环境PyCharm是一种专门为Python开发的IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。可以根据自己电脑的操作系统直去网址:/pycharm/download/#section=windows下载PyCharm社区版(免费版)2.Pycharm与Python的开发环境2.Pycharm运行截图2.Pycharm与Python的开发环境安装Anaconda时就自动安装Python了,同时它还带有一个功能强大的IDE开发工具Spider。Anaconda最大的好处是可以帮助用户找到与安装Python的各种各样的开发库,使得Python的开发十分方便与高效。另外Anaconda对Windows用户十分有用,因为Python的一些开发库在Windows环境下安装常常出现这样那样的问题,而Anaconda能顺利解决这些问题。Anaconda官网https:///distribution/,清华大学软件镜像站https:///anaconda/archive/(建议)2.Anaconda与Python的开发环境在AnacondaNavigator中输入要安装的包,然后选中,点apply就可以安装。2.Anaconda安装包1.1Python3的安装与开发环境配置1.2Python3的基础1.3Python序列应用1.4Python中的函数1.5模块1.6面向对象1.7文件和异常1.8迭代器与生成器1.Python的基本语法标识符是Python给变量、常量、函数、语句块或其他对象命名的有效符号。关键字是被编程语言内部定义并保留使用的标识符。程序员编写程序不能定义与保留字相同的标识符FalsedefifraisenonedelimportreturnTrueelifintryandelseiswhileasexceptlambdawithassertfinallynonlocalyieldbreakfornot

classfromor

continueglobalpass

表1-1Python3的33个关键字1.Python的基本语法注释:单行注释:一般以#号开头,单行注释可以从行的中间开始,它也可以单独占一行多行注释:1.可以用多个#号占用多行2.可以是一对'''包含起来的多行3.用一对"""包含起来的多行1.Python的基本语法行与缩进:Python要求严格的代码缩进,以Tab键或者4个空格进行缩进,缩进表示代码之间的包含和层次关系1.Python的基本语法x=1ifx==1:print('HelloWorld')续行:Python要求严格的代码缩进,以Tab键或者4个空格进行缩进,缩进表示代码之间的包含和层次关系。1.Python的基本语法total=item_one+\item_two+\item_three续行:无需续行符可直接换行有两种情况: 小括号、中括号、花括号的内部可以多行书写。 三引号包括下的字符串也可以跨行书写。1.Python的基本语法

2数据类型与常用函数

1.赋值2.字符串3.逻辑控制赋值每个变量在使用前都必须赋值,第一次对变量名赋值时自动声明该变量。1.赋值:等号(=)用来给变量赋值。等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值,即把等号右侧的计算结果赋给左边变量,包含(=)的语句称为赋值语句。。a=10#整型变量b=10.0#浮点型变量s="hello"#字符串变量赋值链式赋值:同时为多个变量赋值,也称链式赋值。基本格式为:变量1=变量2=变量3=1a=b=c=1赋值同步赋值:可以给同时给多个变量赋值。基本格式为:<变量1>,…,<变量N>=<表达式1>,…,<表达式N>a,b,c=1,2,"hello"数据类型数据类型:变量可以有不同类型的值,称之为数据类型(datatype)。数据类型表示数据的性质,有整数、小数、字符串等类型。Python中的type()函数可以用来查看数据类型。a=10print(type(a))b=Trueprint(type(b))c=3.14print(type(c))d="hello"print(type(d))数据类型

int(整数),如1。整数类型与数学中的整数概念一致,没有取值范围限制。

bool(布尔),如True。bool型取True或False中的一个值。

float(浮点数),如1.23、3E-2。浮点数是带有小数点及小数的数字。取值范围和精度基本无限制,运算存在不确定尾数。

complex(复数),如1+2j、1.1+2.2j。与数学中的复数概念一致,z=a+bj,a是实数部分,b是虚数部分,a和b都是浮点类型,虚数部分用j或者J标识。数据类型操作符及描述操作符描述x+

yx与y之和x-yx与y之差x*yx与y之积x/

yx与y之商

10/3结果是3.3333333333333335x//

yx与y之整数商,即:不大于x与y之商的最大整数10//3结果是3x%

yx与y之商的余数,也称为模运算,模运算

10%3结果是1-xx的负值,即:x*(-1)+xx本身x**yx的y次幂,即:xy当y是小数时,开方运算

10**0.5结果是

2数据类型与常用函数

1.赋值2.字符串3.逻辑控制字符串字符串是用单引号''、双引号""或三引号括起来的一个或多个字符。s1='字符串's2="这是一个句子。"s3="""这是一个段落,可以由多行组成"""字符串Python字符串的两种序号体系字符串索引和切片:索引(s[i]):返回字符串中单个字符取偏移i处的内容(第一项在偏移量0处)负索引意味着从未尾开始数(相当于加上长度)S[0]取回第一项S[-2]取回倒数第二个内容(等同于S[len(S)-2])字符串切片(s[i:j]):返回字符串中一段字符子串提取序列中的邻接段若忽略的话,分片的边界默认为0和序列的长度S[1:3]从偏移1向上取到第3项,但不包括第3项S[1:]从位移量1处一直取到结尾S[:-1]从位移量0处直至取到最后,但不包括最后的一项字符串切片高级用法:使用[M:N:K]根据步长对字符串切片<字符串>[M:N],M缺失表示至开头,N缺失表示至结尾"〇一二三四五六七八九十"[:3]结果是"〇一二"<字符串>[M:N:K],根据步长K对字符串切片"〇一二三四五六七八九十"[1:8:2]结果是"一三五七""〇一二三四五六七八九十"[::-1]结果是"十九八七六五四三二一〇"字符串索引和切片:s='HelloWorld'print(s[0])#从头索引,输出结果为dprint(s[-2])#从尾部索引,输出结果为lprint(s[1:3])#分片:提取片段。输出结果为elprint(s[1:])#输出结果为elloWorldprint(s[:-1])#输出结果为HelloWorl字符串字符串的“加法+”和“乘法*”

加法操作(+)将两个字符串连接成为一个新的字符串 乘法操作(*)生成一个由其本身字符串重复连接而成的字符串S1='Hello'S2='World'print(S1+S2)#输出结果为'HelloWorld'print(3*S1)#输出结果为'HelloHelloHello'1.2Python3的基础字符串处理函数及描述函数描述str(x)任意类型x所对应的字符串形式str(1.23)结果为"1.23"str([1,2])结果为"[1,2]"hex(x)整数x的十六进制小写形式字符串hex(425)结果为"0x1a9"oct(x)整数x的八进制小写形式字符串oct(425)结果为"0o651"chr(u)x为Unicode编码,返回其对应的字符ord(x)x为字符,返回其对应的Unicode编码操作含义+连接*重复<string>[]索引<string>[:]剪切len(<string>)长度返回字符串x的长度len("一二三456")结果为6<string>.upper()字符串中字母小写转大写<string>.lower()字符串中字母大写转小写<string>

.split(str="",num=-1)按指定字符分割字符串为数组<string>.replace(old,new[,max])字符串替换<string>.

strip([chars])去两边空格及去指定字符<string>.

join(sequence)连接两个字符串序列<string>

.find(str,beg=0,end=len(string))搜索指定字符串,如果找到此方法返回的索引,否则返回-1。<string>.format(<逗号分隔的参数>)字符串格式化方法for<var>in<string>字符串迭代字符串常用字符串操作及含义

2数据类型与常用函数

1.赋值2.字符串3.逻辑控制3逻辑控制1.程序的基本结构程序由三种基本结构即顺序结构、分支结构和循环结构组成。这些基本结构都有有一个特点,即只有一个入口和一个出口。任何程序都由这三种基本结构组合而成。程序的控制结构-

顺序结构-

分支结构-

循环结构条件

?是第1步骤第2步骤选择A选择B否条件

?是语句块否操作符数学符号描述<

<

小于<=≤小于等于>=≥大于等于>

>

大于===等于!=≠不等于if语句中条件部分可以使用任何能产生True或False的语句。形成判断条件最常用的方式是采用关系操作。Python语言有6种关系操作符,如下表所示。Python的关系操作符Python用于条件组合的三个保留字操作符及使用描述xandy两个条件x和y的逻辑与xory两个条件x和y的逻辑或notx条件x的逻辑非猜数游戏1.分支结构number=23guess=int(input('Enteraninteger:'))ifguess==number:print('猜对了')猜数游戏2.

二分支结构:if-else语句number=23guess=int(input('Enteraninteger:'))ifguess==number:print('猜对了')else:print('猜错了')猜数游戏2.

二分支紧凑形式number=23guess=int(input('Enteraninteger:'))print("猜{}了".format("对"ifguess==numberelse"错"))猜数游戏3.多分支结构:if-else语句number=23guess=int(input('Enteraninteger:'))ifguess==number:#新块从这里开始print('猜对了')print('但是你还得不到奖励')#新块在这里结束elifguess<number:#另一代码块print('请猜一个更大一些的数字')#你可以在此做任何你希望在该代码块内进行的事情else:print('请猜一个更小一些的数字')#你必须通过猜测一个大于(>)设置数的数字来到达这里。print('完成')猜数游戏4.无限循环结构:while语句number=23running=Truewhilerunning:guess=int(input('Enteraninteger:'))ifguess==number:print('猜对了')#这将导致while循环中止running=Falseelifguess<number:print('请猜一个更大一些的数字')else:print('请猜一个更小一些的数字')else:print('while循环结束')#在这里你可以做你想做的任何事print('Done')遍历循环Python通过保留字for实现“遍历循环”:for <循环变量> in <遍历结构>:<语句块>for...in语句是另一种循环语句,其特点是会在一系列对象上进行迭代(Iterates),意即它会遍历序列中的每一个项目。遍历循环也可以拥有else子句作为可选选项,使用方法如下:for<循环变量> in <遍历结构>:<语句块1>else:<语句块2>foriinrange(1,5):print(i)else:print('Theforloopisover')for...in能在任何序列中工作字符串遍历循环for

c in s:<语句块>-s是字符串,遍历字符串每个字符,产生循环列表遍历循环

for

itemin ls:<语句块>

-ls是一个列表,遍历其每个元素,产生循环文件遍历循环for

line in fi:<语句块>-fi是一个文件标识符,遍历其每行,产生循环break和continuecontinue语句和break语句的区别是:continue语句只结束本次循环,而不终止整个循环的执行。break语句则是结束整个循环过程,不再判断执行循环的条件是否成立whileTrue:s=input('Entersomething:')ifs=='quit':breakiflen(s)<3:print('Toosmall')continueprint('Inputisofsufficientlength')#自此处起继续进行其它任何处理1.1Python3的安装与开发环境配置1.2Python3的基础1.3Python序列应用1.4Python中的函数1.5模块1.6面向对象1.7文件和异常1.8迭代器与生成器序列类型的通用操作符和函数(共11个)操作符描述xins如果x是序列s的元素,返回True,否则返回Falsexnotins如果x是序列s的元素,返回False,否则返回Trues+t连接两个序列s和ts*n或n*s将序列s复制n次s[i]索引,返回s中的第i个元素,i是序列的序号s[i:j]或s[i:j:k]切片,返回序列s中第i到j以k为步长的元素子序列len(s)返回序列s的长度序列类型的通用操作符和函数(共11个)操作符描述min(s)返回序列s的最小元素,s中元素需要可比较max(s)返回序列s的最大元素,s中元素需要可比较s.index(x)或s.index(x,i,j)返回序列s从i开始到j位置中第一次出现元素x的位置s.count(x)返回序列s中出现x的总次数reversed(s)返回序列s逆序排列后的迭代器sorted(s,key,reverse)返回可迭代对象iter排序后的列表,key用来指定排序的规则,reverse用来指定顺序还是逆序排列enumerate(s[,start])返回一个enumerate对象,是一个迭代器,该迭代器的元素是由参数s元素的索引和值组成的元组zip(s1[,s2[…]])返回一个zip对象,是一个迭代器,该迭代器的第n个元素是由每个可迭代对象的第n个元素组成的元组列表1.列表类型定义格式如下:ls=["cat","dog","tiger",1024]#用中括号([])表示print(ls)#输出['cat','dog','tiger',1024]ll=list((1,2,["cat","dog","tiger",1024]))#用list()函数将元组或字符串转换成列表print(ll)#输出[1,2,['cat','dog','tiger',1024]]lt=["monkey","snake",ls]#列表中的元素也可以是列表print(lt)#输出['monkey','snake',['cat','dog','tiger',1024]]列表类型的操作函数或方法函数或方法ls[i]=x描述替换列表ls第i元素为xls[i:j:k]=lt用列表lt替换ls切片后所对应元素子列表dells[i]删除列表ls中第i元素dells[i:j:k]删除列表ls中第i到第j以k为步长的元素ls+=lt更新列表ls,将列表lt元素增加到列表ls中ls*=n更新列表ls,其元素重复n次ls.append(x)在列表ls最后增加一个元素xls.clear()删除列表ls中所有元素列表类型的操作函数或方法函数或方法描述ls.copy()生成一个新列表,赋值ls中所有元素ls.insert(i,x)在列表ls的第i位置增加元素xls.pop(i)将列表ls中第i位置元素取出并删除该元素ls.remove(x)将列表ls中出现的第一个元素x删除ls.reverse()将列表ls中的元素反转ls.count()返回x在列表中出现的次数ls.extend(t)将可迭代对象t的每个元素添加到列表尾部ls.index(x,i,j)返回对象x在列表中的索引值,索引值范围在[i,j]之间ls.sorted(key=None,reverse=False)将列表排序元组元组类型的操作函数或方法元组继承了序列类型的全部通用操作。元组因为创建后不能修改,因此没有特殊操作。creature="cat","dog","tiger","human"#生成元组只需要使用逗号将元素隔离开即可print(creature)#输出('cat','dog','tiger','human')color=(0x001100,"blue",creature)#一个元组可以作为另一个元组的元素,可以采用多级索引获取信息print(color)#输出(4352,'blue',('cat','dog','tiger','human'))元组是包含0个或多个数据项的不可变序列类型。元组类型定义格式如下:元组元组类型在表达固定数据项、函数多返回值、多变量同步赋值、循环遍历等情况下十分有用。deffunc(x):#函数多返回值returnx,x**3a,b='dog','tiger'#多变量同步赋值a,b=(b,a)forx,yin((1,0),(2,5),(3,8)):print(x+y)集合集合类型与数学中的集合概念一致,集合元素之间无序,每个元素唯一,不存在相同元素。当在聚集中一个对象的存在比其顺序或者出现的次数重要时使用集合。A={"python",123,("python",123)} #使用{}建立集合print(A)#输出{('python',123),123,'python'}B=set("pypy123")#使用set()建立集合print(B)#输出{'1','3','y','p','2'}C={"python", 123,"python",123}print(C)#输出{123,'python'}集合类型的操作函数或方法操作函数或方法描述in返回True/False,判断是否是集合的成员notin返回True/False,判断是否不是集合的成员==判断集合是否相等!=判断集合是否不相等S<=T或S<T返回True/False,判断S和T的子集关系S>=T或S>T返回True/False,判断S和T的超集关系S|T返回集合S和T的合集S-T返回S和T中的补集S&T返回集合S和T的交集S^T返回一个新集合,包括集合S和T中的非相同元素S<=T或S<T返回True/False,判断S和T的子集关系S>=T或S>T返回True/False,判断S和T的超集关系集合类型的操作函数或方法操作函数或方法描述s.add(x)如果x不在集合s中,将x增加到ss.discard(x)移除s中元素x,如果x不在集合s中,不报错s.remove(x)移除s中元素x,如果x不在集合s中,产生keyerror异常s.clear()移除s中所有元素s.pop()随机返回s的一个元素,更新s,若s为空产生keyerror异常s.copy()返回集合s的一个副本len(s)返回集合s的元素个数xins判断s中元素x,x在集合s中,返回true,否则返回falsexnotins判断s中元素x,x不在集合s中,返回false,否则返回trueset(x)将其他类型变量x转变为集合类型字典字典类似于你通过联系人名字查找地址和联系人详细情况的地址簿,即,我们把键(名字)和值(详细情况)联系在一起。字典类型的定义格式如下:Dcountry={"中国":"北京","美国":"华盛顿","法国":"巴黎"}#用大括号直接创建字典print(Dcountry)#输出{'中国':'北京','美国':'华盛顿','法国':'巴黎'}DP={}#使用大括号{}创建一个空的字典print(DP)#输出{}info=[(‘Lily’,3000),(‘Maya’,4000),(‘Ada’,5000)]dinfo=dict(info)#用dict()函数创建字典类型的操作函数或方法函数或方法描述deld[k]删除字典d中键k对应的数据值kind判断键k是否在字典d中,如果在返回True,否则Falsed.keys()返回字典d中所有的键信息d.values()返回字典d中所有的值信息d.items()返回字典d中所有的键值对信息d.copy()返回字典d的副本字典类型的操作函数或方法函数或方法描述d.get(k,<default>)键k存在,则返回相应值,不在则返回<default>值d.pop(k,<default>)键k存在,则取出相应值,不在则返回<default>值d.popitem()随机从字典d中取出一个键值对,以元组形式返回d.clear()删除所有的键值对d.update(d2)将d2的键值对添加到d中,如果键是已经存在的,则更新键对应的值len(d)返回字典d中元素的个数1.1Python3的安装与开发环境配置1.2Python3的基础1.3Python序列应用1.4Python中的函数1.5模块1.6面向对象1.7文件和异常1.8迭代器与生成器函数的定义和调用函数的定义def

<函数名>(<参数列表(0个或多个)>):

<函数体>return <返回值列表>2.函数的调用

函数调用和执行的一般形式如下:<函数名>(<参数列表>)defsayHello():print('HelloWorld!')#blockbelongingtothefunction#EndoffunctionsayHello()#callthefunctionsayHello()#callthefunctionagain函数的定义和调用函数的参数函数调用时,实参默认采用按照位置顺序的方式传递给函数。假设func()函数有6个参数,它的定义如下,其中参数分别表示两组三维坐标值。deffunc(x1,y1,z1,x2,y2,z2):returnresult=func(1,2,3,4,5,6)result=func(x2=4,y2=5,z2=6,x1=1,y1=2,z2=3)函数的缺省参数(参数默认值)具有默认值的参数就是缺省参数。在函数定义的形参名后使用赋值语句可以给形参指定默认参数值。defprintinfo(name,age=35):"打印任何传入的字符串"print("名字:",name)print("年龄:",age)return#调用printinfo函数printinfo(age=50,name="lily")print("------------------------")printinfo(name="lily")函数的缺省参数(参数默认值)默认值只会解析一次。当默认值是一个可变对象,诸如列表、字典或大部分类实例时,会产生一些差异。deff(a,L=[]):L.append(a)return(L)print(f(1))print(f(2))print(f(3))deff(a,L=None):ifLisNone:L=[]L.append(a)return(L)函数的可变参数在函数定义时,可以让函数的参数个数可变。deffact(n,*b):s=1foriteminb:s*=itemreturnsprint(fact(10,3,5,8))变量的作用域全局变量和局部变量x=50#x是全局变量deffunc(x):print('xis',x)x=2#这个x是在函数内新生成的局部变量,不是全局变量print('Changedlocalxto',x)func(x)#print('xisstill',x)#测试一下全局变量x是否改变global语句使用global语句指定全局变量x=50deffunc():globalx#global语句被用来声明x是全局的print('xis',x)x=2print('Changedglobalxto',x)func()print('Valueofxis',x)global语句当全局变量不是整数,而且列表类型,结果会和前面的不一样ls=["F","f"]#通过使用[]真实创建了一个全局变量列表lsdeffunc(a) :ls.append(a)#此处ls是列表类型,未真实创建,则等同于全局变量returnfunc("C")#全局变量ls被修改print(ls)#测试一下ls值是否改变ls=["F","f"]#通过使用[]真实创建了一个全局变量列表lsdeffunc(a):

ls=[]#此处ls是列表类型,真实创建,ls是局部变量ls.append(a)returnfunc("C")#局部变量ls被修改print(ls)局部变量和全局变量(1)简单数据类型变量无论是否与全局变量重名,仅在函数内部创建和使用,函数退出后变量被释放,如有全局同名变量,其值不变。(2)简单数据类型变量在用global保留字声明后,作为全局变量使用,函数退出后该变量保留且值被函数改变。局部变量和全局变量(3)对于组合数据类型的全局变量,如果在函数内部没有被真实创建的同名变量,则函数内部可以直接使用并修改全局变量的值。(4)如果函数内部真实创建了组合数据类型变量,无论是否有同名全局变量,函数仅对局部变量进行操作,函数退出后局部变量被释放,全局变量值不变。非局部语句deffunc_outer():msg="Outside!"definside():print(msg)inside()print(msg)func_outer()deffunc_outer():msg="Outside!"definside():msg="Inside"print(msg)inside()print(msg)func_outer()deffunc_outer():msg="Outside!"definside():nonlocalmsgmsg="Inside"print(msg)inside()print(msg)func_outer()lambda函数lambda函数又称匿名函数,是指一类无需定义函数名的函数。匿名函数并不是没有名字,而是将函数名作为函数结果返回,语法格式如下:<函数名>=lambda<参数列表>:<表达式>lambda函数与正常函数一样,等价于下面形式:def<函数名>(<参数列表>):

return<表达式>lambda函数1、将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数。sum=lambdaarg1,arg2:arg1+arg2#调用sum函数print("相加后的值为:",sum(10,20))#输出“相加后的值为:30”print("相加后的值为:",sum(20,20))#输出“相加后的值为:40”lambda函数2、将lambda函数赋值给其他函数,从而将其他函数用该lambda函数替换。importtime#为了把标准库time中的函数sleep的功能屏蔽(Mock),我们可以在程序初始化时调用:time.sleep=lambdax:None#这样,在后续代码中调用time库的sleep函数将不会执行原有的功能。#例如:time.sleep(3) #程序不会休眠3秒钟,而是因为lambda输出为None,所以这里结果是什么都不做lambda函数将lambda函数作为参数传递给其他函数比如说结合map、filter、sorted、reduce等一些Python内置函数使用.#计算平方数,lambda写法squares=map(lambdax:x**2,[1,2,3,4,5])print(list(squares))#输出[1,4,9,16,25]#过滤出列表中的所有偶数f=filter(lambdax:x%2==0,[1,2,3,4,5,6])print(list(f))#输出[2,4,6]1.1Python3的安装与开发环境配置1.2Python3的基础1.3Python序列应用1.4Python中的函数1.5模块1.6面向对象1.7文件和异常1.8迭代器与生成器创建自己的模块Python创建自己的模块很方便,所有的.py文件都被视为是一个模块。例如,如果我们在一个modulel.py的文件中输入def语句,我们就生成了有一个属性的模块一名字printer,它恰好是对一个函数对象的引用:defprinter(x):#模块属性print(x)载入模块(1)import语句想使用Python源文件,只需在另一个源文件里执行import语句,语法如下:importmodule1[,module2[,...moduleN],实例如下:importmodule#得到模块module.printer("Helloworld"!)#限定性取得名字(模块.名字)载入模块(2)from…import语句Python的from语句让你从模块中导入一个指定的部分到当前命名空间中,语法如下:frommodnameimportname1[,name2[,...nameN]]。实例如下:frommoduleimportprinter##得到一个输出printer("Helloworld"!)#不需要限定名载入模块(3)from…import*语句把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:frommodnameimport*,实例如下:frommoduleimport*#得到所有输出printer("Helloworld"!)#不需要限定名模块的__name__每个模块都有一个名称,在模块中可以通过语句来找出模块的名称。当我们只想在程序本身被使用的时候运行主块,而在它被别的模块输入的时候不运行主块,我们可以通过模块的__name__属性完成。实例如下:if__name__=='__main__':print('Thisprogramisbeingrunbyitself')else:print('Iambeingimportedfromanothermodule')>pythonusing_name.pyThisprogramisbeingrunbyitself>python>>>importusing_nameIambeingimportedfromanothermoduledir()函数我们使用内建的dir()函数来列出模块定义的标识符。标识符有函数、类和变量。importsysprint(dir(sys))['__breakpointhook__','__displayhook__','__doc__','__excepthook__','__interactivehook__','__loader__','__name__','__package__','__spec__','__stderr__','__stdin__','__stdout__','_base_executable','_clear_type_cache','_current_frames','_debugmallocstats','_enablelegacywindowsfsencoding','_framework','_getframe','_git','_home','_xoptions','api_version','argv','base_exec_prefix','base_prefix','breakpointhook','builtin_module_names','byteorder','call_tracing','callstats','copyright','displayhook','dllhandle','dont_write_bytecode','exc_info','excepthook','exec_prefix','executable','exit','flags','float_info','float_repr_style','get_asyncgen_hooks','get_coroutine_origin_tracking_depth','get_coroutine_wrapper','getallocatedblocks','getcheckinterval','getdefaultencoding','getfilesystemencodeerrors','getfilesystemencoding','getprofile','getrecursionlimit','getrefcount','getsizeof','getswitchinterval','gettrace','getwindowsversion','hash_info','hexversion','implementation','int_info','intern','is_finalizing','maxsize','maxunicode','meta_path','modules','path','path_hooks','path_importer_cache','platform','prefix','set_asyncgen_hooks','set_coroutine_origin_tracking_depth','set_coroutine_wrapper','setcheckinterval','setprofile','setrecursionlimit','setswitchinterval','settrace','stderr','stdin','stdout','thread_info','version','version_info','warnoptions','winver']包包是模块的文件夹,它定义了一个由模块及子包,和子包下的子包等组成的Python的应用环境,它必须有一个特殊的__init__.py文件,该文件的内容可以为空。__init__.py用于标识当前文件夹是一个包。-<somefolderpresentinthesys.path>/-world/-__init__.py-asia/-__init__.py-india/-__init__.py-foo.py-africa/-__init__.py-madagascar/-__init__.py-bar.py1.1Python3的安装与开发环境配置1.2Python3的基础1.3Python序列应用1.4Python中的函数1.5模块1.6面向对象1.7文件和异常1.8迭代器与生成器面向对象技术简介类(Class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。方法:类中定义的函数。包括普通方法、静态方法和类方法。三种方法在内存中都归属于类,区别在于调用方式不同。类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。面向对象技术简介方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。局部变量:定义在方法中的变量,只作用于当前实例的类。实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用self修饰的变量。面向对象技术简介继承:即一个派生类(derivedclass)继承基类(baseclass)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。实例化:创建一个类的实例,类的具体对象。对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。self类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python会提供这个值。这个特别的变量指对象本身,按照惯例它的名称是self。

类类的定义:使用class语句来创建一个类并赋给它一个名字,class之后为类的名称并以冒号结尾。实例化对象:像调用一个函数一样调用类就生成了一个新的实例对象_init__方法:__init__方法用来在类的一个对象被建立时把一些我们认为必须绑定的属性强制填写进去。注意,特殊方法“__init__”的开始和结尾都是双下划线。

类classFirstClass:#定义一个类对象def__init__(self,data):#定义__init__方法self.data=data#self就是实例defdisplay(self):#定义类方法print(self.data)#self.data:每个实例的数据x=FirstClass("lily")#生成两个实例y=FirstClass(3.14159)#每一个是一个新的名字空间x.display()y.display()类的继承classSchoolMember:'''Representsanyschoolmember.'''def__init__(self,name,age):=nameself.age=ageprint('(InitializeSchoolMember:{0})'.format())deftell(self):'''Tellmydetails.'''print('Name:"{0}"Age:"{1}"'.format(,self.age),end='')classTeacher(SchoolMember):'''Representsateacher.'''def__init__(self,name,age,salary):SchoolMember.__init__(self,name,age)self.salary=salaryprint('(InitializedTeacher:{0})'.format())deftell(self):SchoolMember.tell(self)print('Salary:"{0:d}"'.format(self.salary))类的继承classStudent(SchoolMember):'''Representsastudent.'''def__init__(self,name,age,marks):SchoolMember.__init__(self,name,age)self.marks=marksprint('(InitializedStudent:{0})'.format())deftell(self):SchoolMember.tell(self)print('Marks:"{0:d}"'.format(self.marks))t=Teacher('Mrs.Shrividya',40,30000)s=Student('Swaroop',22,75)print#printsablanklinemembers=[t,s]formemberinmembers:member.tell()#worksforbothTeachersandStudents

文件和异常poem='''\ProgrammingisfunWhentheworkisdoneifyouwannamakeyourworkalsofun:usePython!'''f=open('poem.txt','w')#以‘写’的方式打开f.write(poem)#把文本写入文件f.close()#关闭文件f=open('poem.txt')#如果未指定模式,则默认为只读模式whileTrue:line=f.readline()iflen(line)==0:#表示EOFbreakprint(line,end='')#注意逗号,以避免Python自动添加换行符f.close()#关闭文件文件的打开模式

文件的打开模式描述'r'只读模式,默认值,如果文件不存在,返回FileNotFou

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论