Python基础语法大全及知识点总结(珍藏版)

开通VIP,畅享免费电子书等14项超值服

首页

好书

留言交流

下载APP

联系客服

2023.03.21广东

Python语言特点:

懒人模式,安装提示里勾选上自动配置环境变量,pip等,安装完成后,你连环境变量都不用配置了。

但是学习的人还是要谦虚一点,配环境变量也是基本功。

“Python.exe”所在的文件夹C:\Python\Python36-32加入的环境变量的Path下面就好了

配置完成后cmd终端里检查一下,如下图没有保错,说明配置正确。

对缩进要求严格,四个空格,不建议用Tab,不同平台上缩进不一样

我使用的IDE为Pycharm,注释为ctrl+/

一张图概况Python学习(转自W3Cschool)

(1)打印出helloworld

(2)注释

(3)数据类型

(4)运算

(5)输入

(6)输出

(7)序列

(8)相等比较

(9)选择

(10)循环

(11)字典(dict)

(12)集合(set)(不常用)

(14)pass,del,exec,eval

(15)内建函数

(1)文件

(2)错误和异常

(3)模块和包

(4)作用域

(5)高阶函数

(6)装饰器

(7)参数

(8)面向对象

(9)定制类(魔术方法)

(11)数学与随机数

(12)正则表达式

1、(单行注释)以#开头,后面的文字直到行尾都算注释

3、(中文注释)要注释中文必须程序开头先写上#-*-coding:utf-8-*-,不然会报错

2、这里的var=xxxx不叫变量赋值,而叫变量绑定,一个符号可以绑定任意类型的值。

3、内置函数type(),用以查询变量的类型

5、布尔型(True,False,可以用and,or,not运算,而不是C语言的&&和||)

6、多变量赋值

1、加、减、乘、除、求余、乘方

2、乘方**右结合

2**3=82**2**3=256(2**2)**3=643、整数运算结果仍然是整数,浮点数运算结果仍然是浮点数。

但是整数和浮点数混合运算的结果就变成浮点数了。

4、字符串与整数相乘

要解释上述结果,又涉及到and和or运算的一条重要法则:短路计算。

①在计算aandb时,如果a是False,则根据与运算法则,整个结果必定为False,因此返回a;如果a是True,则整个计算结果必定取决与b,因此返回b。

②在计算aorb时,如果a是True,则根据或运算法则,整个计算结果必定为True,因此返回a;如果a是False,则整个计算结果必定取决于b,因此返回b。

所以Python解释器在做布尔运算时,只要能提前确定计算结果,它就不会往后算了,直接返回结果。

6、不支持自加(i++)和自减(i--)

7、地板除(//)除法不管操作数何种数值类型,总是舍去小数部分,返回数字序列中比真正的商小的最接近的数字。

print5//3#1print1.0//2.0#0.0print-1/2#-1(5)输入

1、由此可见,input()在对待纯数字输入返回所输入的数字的类型(int,float)

而raw_input()将所有输入作为字符串看待,返回字符串类型。

为了避免类型发生错误,一般情况下使用raw_input()来与用户交互。

1、Python2里面print可以直接接字符串或者运算。

2、Python3里面print变成了一个函数,上面的写法不支持了,必须用一个括号括起来,否则会报告语法错误。

3、>>>是Python解释器的提示符,不是代码的一部分。

4、print语句也可以跟上多个字符串,用逗号“,”隔开,遇到逗号“,”会输出一个空格:

6、转义

%s表示由一个字符串来替换,%d表示由一个整数来替换,%f表示由一个浮点数来替换。

Python非常灵活,即使将数字传递给%s,也不会像其他要求严格的语言一样引发严重后果。

1、序列有两种:list(可变列表)和tuple(不可变元组)

2、定义:序列是一组有顺序的元素的集合,可以包含一个或多个元素,也可以没有任何元素。

list=[0,1,2,3,4,5]#列表用中括号,可改变,理解为数组tuple=(0,1,2,3,4,5)#元祖用小括号,不可改变由于Python是动态语言,所以list中包含的元素并不要求都必须是同一种数据类型

2、序列的通用操作

记住倒数第一个元素的索引是-1。倒序切片包含起始索引,不包含结束索引。

3、可变的列表(list)

list=[0,1,2,3,4,5]list.append(7)#append()总是把新元素添加到list的尾部printlist#[0,1,2,3,4,5,7]list.insert(0,-1)#insert()接受两个参数,第一个是索引,第二个是元素printlist#[-1,0,1,2,3,4,5,7]list.insert(-1,6)#insert(-1)是最后一个元素之前,即倒数第二个元素,因为insert()前插printlist#[-1,0,1,2,3,4,5,6,7]list.pop()#pop()方法总是删掉最后一个元素printlist#[-1,0,1,2,3,4,5,6]list.pop(0)#参数为索引printlist#[0,1,2,3,4,5,6]list[6]=7#对list中的某一个索引赋值,就可以直接用新的元素替换掉原来的元素printlist#[0,1,2,3,4,5,7]list[0],list[-1]=list[-1],list[0]#第一与最后位置调换printlist#[7,1,2,3,4,5,0]在使用可变对象的方法如sort(),extend()和reverse()的时候要注意,这些操作会在列表

中原地执行操作,也就是说现有的列表内容会被改变,但是没有返回值!

4、不可变的元组(tuple)

字符串是一种特殊的元组

没有append()方法,也没有insert()和pop()方法,也不能赋值

Tuple比list操作速度快.如果您定义了一个值的常量集,并且唯一要用它做的是不断地遍历它,请使用tuple代替list.如月份,星期。

print(1,)#一个元素的元祖。

因为()既可以表示tuple,又可以作为括号表示运算时的优先级,结果(1)被Python解释器计算出结果1,导致我们得到的不是tuple,而是整数1。正是因为用()定义单元素的tuple有歧义,所以Python规定,单元素tuple要多加一个逗号“,”,这样就避免了歧义。

可变的元组:tuple的元素指向list,而list内的值可变

5、序列解包

#==和is的差别,==比较的是值,is比较的是引用。x=[1,2,3]y=xz=[1,2,3]print(x==y)#Trueprint(x==z)#Trueprint(xisy)#Trueprint(xisz)#False(9)选择

1、Python代码的缩进规则。具有相同缩进的代码被视为代码块

2、缩进请严格按照Python的习惯写法:4个空格,不要使用Tab,更不要混合Tab和空格

3、格式

If后面不需要括号,但是条件后面需要冒号

elif即elseif

4、三元运算符

x,y=4,3ifx

1、for循环依次把list或tuple的每个元素迭代出来

格式

name这个变量是在for循环中定义的,意思是,依次取出list中的每一个元素,并把元素赋值给name,然后执行for循环体(就是缩进的代码块)

2、while循环,不会迭代list或tuple的元素,而是根据表达式判断循环是否结束。

3、中断循环break和continue

4、range()的用法

range(1,5)#代表从1到5(不包含5)[1,2,3,4]range(1,5,2)#代表从1到5,间隔2(不包含5)[1,3]range(5)#代表从0到5(不包含5)[0,1,2,3,4]5、Python中,迭代永远是取出元素本身,而非元素的索引。

对于有序集合,元素确实是有索引的。使用enumerate()函数拿到索引

使用enumerate()函数,我们可以在for循环中同时绑定索引index和元素name。但是,这不是enumerate()的特殊语法。实际上,enumerate()函数把:

变成了类似:

因此,迭代的每一个元素实际上是一个tuple:

6、好用的zip()方法

forx,yinzip(range(1,10),range(1,10)):print(x,y)#结果#(1,1)#(2,2)#(3,3)#(4,4)#(5,5)#(6,6)#(7,7)#(8,8)#(9,9)7、列表生成式,非常简洁

要生成[1x1,2x2,3x3,...,10x10]

列表生成式的for循环后面还可以加上if判断。例如:

print[x*xforxinrange(1,11)ifx%2==0]#[4,16,36,64,100]8、迭代器

它为类序列对象提供了一个类序列的接口。

迭代非序列集合(例如映射和文件)时,可以创建更简洁可读的代码。

1、字典的元素没有顺序。你不能通过下标引用元素。字典是通过键来引用,用大括号

查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。

dict的缺点是占用内存大,还会浪费很多内容

dict是按key查找,所以,在一个dict中,key不能重复

作为key的元素必须不可变

2、已知两个列表,一个是名字,一个是成绩,要根据名字找到对应的成绩用两个list不方便,如果把名字和分数关联起来,组成类似的查找表,即Python中的dict

用dict表示“名字”-“成绩”的查找表如下:

4、花括号{}表示这是一个dict,然后按照key:value,写出来即可。最后一个key:value的逗号可以省略。

5、由于dict也是集合,len()函数可以计算任意集合的大小:

printlen(d)#运算结果为3

一个key-value算一个,因此,dict大小为3。

6、可以简单地使用d[key]的形式来查找对应的value,这和list很像,不同之处是,list必须使用索引返回对应的元素,而dict使用key:

注意:通过key访问dict的value,只要key存在,dict就返回对应的value。如果key不存在,会直接报错:KeyError。

要避免KeyError发生,有两个办法:

一是先判断一下key是否存在,用in操作符:

二是使用dict本身提供的一个get方法,在Key不存在的时候,返回None:

8、循环调用

forkeyind:#或forkeyind.keys()printd[key]#结果#99#85#95#599、字典的常用方法

10、cmp()比较

(1)先比较字典长度

(2)再比较字典的键

(3)最后比较字典的值

(4)都一样就相等

1、dict的作用是建立一组key和一组value的映射关系,dict的key是不能重复的。

有的时候,我们只想要dict的key,不关心key对应的value,目的就是保证这个集合的元素不会重复,这时,set就派上用场了。

2、set持有一系列元素,这一点和list很像,但是set的元素没有重复,而且是无序的,这点和dict的key很像。

3、创建set的方式是调用set()并传入一个list,list的元素将作为set的元素:

(13)函数

1、定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。

3、函数返回多个值

其实这只是一种假象,Python函数返回的仍然是单一值,是一个tuple:

但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。

4、在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

deffact(n):ifn==1:return1returnn*fact(n-1)printfact(10)#计算10的阶乘5、定义函数的时候,还可以有默认参数。

由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面:

6、一个函数能接受任意个参数,我们就可以定义一个可变参数:

7、基本数据类型的参数:值传递

表作为参数:指针传递

1、pass语句

pass代表该语句什么都不做,因为python中空代码是非法的,比如一个if语句要求什么内容都不做,我们就可以使用pass语句。

2、del语句

一般来说python会删除那些不在使用的对象(因为使用者不会再通过任何变量或者数据结构引用它们)

3、exec语句(运行字符串中的程序)

4、eval函数(会计算python表达式(以字符串形式书写),并且返回结果)

1、cmp(obj1,obj2)比较obj1和obj2,根据比较结果返回整数i:

如果是用户自定义对象,cmp()会调用该类的特殊方法__cmp__()

2、str()强制转换成字符串

3、type():详见(3)数据类型-3、

4、help():通过用函数名作为help()的参数就能得到相应的帮助信息

5、isinstance(变量名,类型):判断是否是这个类型的元素,可以用if语句

6、abs():取绝对值

7、enumerate():详见(10)循环-5、

8、len(seq):返回seq的长度

9、sorted(iter):排序,会调用cmp()

10、zip(a1,a2……):详见(10)循环-6、

11、range():详见(10)循环-4、

12、string.lower():转换字符串中所有大写字符为小写

13、string.upper():转换字符串中所有小写字符为大写

14、string.strip():删去字符串开头和结尾的空格

15、string.capitalize():把字符串第一个字符大写

16、string.title():所有单词都以大写开头

17、max()和min():找出最大和最小值

18、sum():求和

19、reversed():倒序输出

Python进阶语法:

1、文件也是一个对象。

2、打开文件

f=open(文件名,模式)

文件名可以是相对路径或者绝对路径

4、关闭close()

write()方法可将任何字符串写入一个打开的文件。

主动调用close()写缓存同步到磁盘,或者写入数据量大于或等于写缓存,写缓存同步到磁盘

6、读取read()、readline()、readlines()

read(size)方法从一个打开的文件中读取一个字符串。size若不填则为尽量多的字符串,若填了则为结束位置。

tell()方法告诉你文件内的当前位置;即下一次的读写会发生在文件开头这么多字节之后:

seek(offset[,from])方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。

8、重命名

Python的os模块提供了帮你执行文件处理操作的方法,必须先导入它,才可以调用。

os.rename(当前文件名,新的文件名)

9、删除文件

同样需要导入os模块,才可以调用。

os.remove(文件名)

1、错误类型

OverflowError数值运算超出最大限制

ZeroDivisionError除(或取模)零(所有数据类型)

AttributeError对象没有这个属性

IOError输入/输出操作失败

IndexError序列中没有此索引(index)

SyntaxErrorPython语法错误

TypeError对类型无效的操作

ValueError传入无效的参数

2、try-except处理异常

try-except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。

except若不带任何异常类型,即捕获所有发生的异常。但是不能捕获语法错误异常,如ifa,因为是运行前错误而不是运行时错误

也可带多种类型except(Exception1[,Exception2[,...ExceptionN]]]):

错误类型后面跟着变量e,可以print错误提示

案例如下

语句是否发生异常都将执行最后的代码。将异常保留下来交给系统处理,本身不处理异常。

作用:为处理异常事件提供清理机制,用来关闭文件或者释放系统资源。

可以使用except语句或者finally语句,但是两者不能同时使用。else语句也不能与finally语句同时使用。

4、try-except-finally

若try语句没有捕获异常,执行完try代码段后,执行finally

若try捕获异常,首先执行except处理异常,然后执行finally

5、try-except-else-finally

若try语句没有捕获异常,执行完try代码段后,执行else代码段,最后执行finally

若try捕获异常,首先执行except处理错误,然后执行finally

6、try-finally-except

当在try块中抛出一个异常,立即执行finally块代码。

finally块中的所有语句执行后,异常被再次提出,并执行except块代码。

7、with语句

用来代替try-except-finally语句,使代码更加简洁

withcontext[asvar]:with_suitecontext表达式返回是一个对象

var用来保存context返回对象,单个返回值或元组

with_suite使用var变量对context返回对象进行操作

1、打开1.txt文件

2、f变量接收文件对象返回的对象

3、with中的代码执行完成后,关闭文件

程序使用了上下文管理器(with...as...)。上下文管理器有隶属于它的程序块。当隶属的程序块执行结束的时候(也就是不再缩进),上下文管理器自动关闭了文件

运用情况:①文件操作②进城之间互斥操作:例如互斥锁③支持上下文的其他对象

8、raise主动抛出异常

断言语句:assert语句是用于检测表达式是否为真,如果为假,引发AssertionError错误

1、概念介绍

#test.py自身模块名test

importp1.util引用p1包的模块util

printp1.util.f(2)调用p1.util的函数f()

如何区分包和普通目录包下面有个__inti__.py文件

2、如果我们只希望导入用到的math模块的某几个函数,而不是所有函数,可以用下面的语句:

frommathimportpow,sin,log3、可以给函数起个“别名”来避免冲突:as

4、如果导入的模块不存在,Python解释器会报ImportError错误:

5、第三方模块管理系统

-easy_install

-pip(推荐,已内置到Python2.7.9)

1、函数作用域LEGBL>E>G>B

L:local函数内部作用域

E:enclosing函数内部与内嵌函数之间,即闭包

G:global全局作用域

B:bulid-in内置作用域list,tuple之类

1、由于参数x,y和f都可以任意传入,如果f传入其他函数,就可以得到不同的返回值。

2、map()映射

map()是Python内置的高阶函数,它接收一个函数f和一个list,并通过把函数f依次作用在list的每个元素上,得到一个新的list并返回。

deff(x):returnx*xprintmap(f,[1,2,3,4,5,6,7,8,9])#[1,4,9,16,25,36,49,64,81]利用map()函数,可以把一个list转换为另一个list,只需要传入转换函数。

由于list包含的元素可以是任何类型,因此,map()不仅仅可以处理只包含数值的list,事实上它可以处理包含任意类型的list,只要传入的函数f可以处理这种数据类型。

3、reduce()折叠

reduce()函数接收的参数和map()类似,一个函数f,一个list,但reduce()传入的函数f必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。

reduce()还可以接收第3个可选参数,作为计算的初始值。

4、filter()过滤

filter()函数接收一个函数f和一个list,这个函数f的作用是对每个元素进行判断,返回True或False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。

defis_odd(x):#是奇数returnx%2==1printfilter(is_odd,[1,4,6,7,9,12,17])#[1,7,9,17]利用filter(),可以完成很多有用的功能,例如,删除None或者空字符串:

5、sorted():对list进行排序

printsorted([36,5,12,9,21])#[5,9,12,21,36]但sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素x,y,如果x应该排在y的前面,返回-1,如果x应该排在y的后面,返回1。如果x和y相等,返回0。

6、Python的函数不但可以返回int、str、list、dict等数据类型,还可以返回函数!

在函数内部定义的函数和外部定义的函数是一样的,只是他们无法被外部访问:

7、闭包(closure)

内部函数中引用了外层函数的变量(enclosing作用域的变量),然后返回内层函数的情况。

闭包的作用是封装和代码复用。

传递的是参数

正确使用闭包,就要确保引用的局部变量在函数返回后不能变。

返回函数不要引用任何循环变量,或者后续会发生变化的变量。

#希望一次返回3个函数,分别计算1x1,2x2,3x3:defcount():fs=[]foriinrange(1,4):deff():returni*ifs.append(f)returnfsf1,f2,f3=count()printf1(),f2(),f3()#999#当count()函数返回了3个函数时,这3个函数所引用的变量i的值已经变成了3。由于f1、f2、f3并没有被调用,所以,此时他们并未计算i*i,当f1被调用时,才计算i*i,但现在i的值已经变为3#正确如下defcount():fs=[]foriinrange(1,4):deff(j):defg():returnj*jreturngr=f(i)fs.append(r)returnfsf1,f2,f3=count()printf1(),f2(),f3()#1498、匿名函数lambda

通过对比可以看出,匿名函数lambdax:x*x实际上就是:

deff(x):

returnx*x

关键字lambda表示匿名函数,冒号前面的x表示函数参数。

匿名函数有个限制,就是只能有一个表达式,不写return,返回值就是该表达式的结果。

使用匿名函数,可以不必定义函数名,直接创建一个函数对象,很多时候可以简化代码:

printsorted([1,3,9,5,0],lambdax,y:-cmp(x,y))#[9,5,3,1,0]返回函数的时候,也可以返回匿名函数:

1、decorator本质上就是一个高阶函数,它接收一个函数作为参数,然后,返回一个新函数。

使用decorator用Python提供的@语法,这样可以避免手动编写f=decorate(f)这样的代码。

2、装饰器用来装饰函数,返回一个函数对象

被装饰函数标识符指向返回的函数对象

4、@log的定义

5、要让@log自适应任何参数定义的函数,可以利用Python的*args和**kw,保证任意个数的参数总是能正常调用:

可变参数*args表示任何多个无名参数,它是一个tuple;**kwargs表示关键字参数,它是一个dict。并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前。

所以,带参数的log函数首先返回一个decorator函数,再让这个decorator函数接收my_func并返回新函数:

而且wrapper(*args,**kw)要调用外层参数prefix,所以无法拆开

9、当一个函数有很多参数时,调用者就需要提供多个参数。如果减少参数个数,就可以简化调用者的负担。

比如,int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换:

但int()函数也提供额外的base参数,默认为10。如果传入base参数,就可以做N进制转换:

functools.partial就是帮助我们创建一个偏函数的,不需要我们自己定义int2(),可以直接使用下面的代码创建一个新的函数int2:

1、位置参数必须以在被调用函数中定义的准确顺序来传递,参数数目必须一致。

2、所有必需的参数都要在默认参数之前。

3、如果命名了参数,这里可以不按顺序给出参数。

func(*tuple_grp_nonkw_args,**dict_grp_kw_args)

其中的tuple_grp_nonkw_args是以元组形式体现的非关键字参数组,dict_grp_kw_args是装有关键字参数的字典。

5、可变长的参数元组必须在位置和默认参数之后。

6、关键字变量参数(Dictionary)

在我们有不定数目的或者额外集合的关键字的情况中,参数被放入一个字典中,字典中键为参数名,值为相应的参数值。

#收集命名参数

deffunc_with_collection_rest_naned_parameters(*args,**kw):

print(args)

print(kw)

func_with_collection_rest_naned_parameters(1,2,3,x=4,y=5,z=6)

#这会导致args[0]指向第一个实参,args[1]指向第二个实参。

#{}

#这里的执行相当于func_with_collection_rest_naned_parameters(1,2,3,x=4,y=5,z=6)。

1、类通过class关键字定义。类名以大写字母开头,紧接着是(object),表示该类是从哪个类继承下来的。

类也要细致命名,像“AddrBookEntry”,“RepairShop”等等就是很好的名字

Python并不支持纯虚函数(像C++)或者抽象方法(如在JAVA中)

classPerson(object):

pass

2、有了Person类的定义,就可以创建出具体的xiaoming、xiaohong等实例。创建实例使用类名+(),类似函数调用的形式创建:

Python规范推荐使用骆驼记法的下划线方式,比如,“update_phone”“update_email”。

xiaoming=Person()

xiaohong=Person()

3、由于Python是动态语言,对每一个实例,都可以直接给他们的属性赋值:

4、构造函数__init__()方法

def__init__(self,name,gender,birth):

self.name=name

self.gender=gender

self.birth=birth

__init__()方法的第一个参数必须是self(也可以用别的名字,但建议使用习惯用法),后续参数则可以自由指定,和定义函数没有任何区别。

相应地,创建实例时,就必须要提供除self以外的参数:

定义Person类的__init__方法,除了接受name、gender和birth外,还可接受任意关键字参数,并把他们都作为属性赋值给实例。

要定义关键字参数,使用**kw;

由于Python具有垃圾对象回收机制(靠引用计数),这个函数要直到该实例对象所有的引用都被清除掉后才会执行。所以很少用到。

def__init__(self,……):

6、Python对属性权限的控制是通过属性名来实现的,如果一个属性由双下划线开头(__),该属性就无法被外部访问。

7、类属性是直接绑定在类上的,所以,访问类属性不需要创建实例,就可以直接访问:

当实例属性和类属性重名时,实例属性优先级高,它将屏蔽掉对类属性的访问。而其他不变

9、访问类的属性

有两种方法。最简单的是使用dir()内建函数。另外是通过访问类的字典属性__dict__,这是所有类都具备的特殊属性之一。

10、实例的方法。

实例的方法就是在类中定义的函数,它的第一个参数永远是self,指向调用该方法的实例本身,其他参数和一个普通函数是完全一样的:在其他语言中,self就是this.

在实例方法内部,可以访问所有实例属性,这样,如果外部需要访问私有属性,可以通过方法调用获得,这种数据封装的形式除了能保护内部数据一致性外,还可以简化外部调用的难度。

11、方法也分实例方法和类方法。

@classmethod调用的时候用类名而不是某个对象

在class中定义的全部是实例方法,实例方法第一个参数self是实例本身。

要在class中定义类方法,需要这么写:

因为是在类上调用,而非实例上调用,因此类方法无法获得任何实例变量,只能获得类的引用

12、@property像访问属性一样调用方法,即不用括号

get/set方法:

把一个getter方法变成属性,只需要加上@property就可以了

setter是关键字,这种“@+方法名字+点+setter”是个固定格式与@property搭配使用。

13、函数和方法

函数是直接调用函数名,仅仅是一部分代码

方法必须和对象结合在一起使用,是类的一部分

方法可以看做是类的属性

一定要用super(Student,self).__init__(name,gender)去初始化父类,否则,继承自Person的Student将没有name和gender。

函数super(Student,self)将返回当前类继承的父类,即Person,然后调用__init__()方法,注意self参数已在super()中传入,在__init__()中将隐式传递,不需要写出(也不能写)

使用super()的漂亮之处在于,你不需要明确给出任何基类名字,这意味着如果你改变了类继承关系,你只需要改一行代码(class语句本身)而不必在大量代码中去查找所有被修改的那个类的名字。

一个实例可以看成它本身的类型,也可以看成它父类的类型。

15、多重继承

多重继承的目的是从两种继承树中分别选择并继承出子类,以便组合功能使用。

举个例子,Python的网络服务器有TCPServer、UDPServer、UnixStreamServer、UnixDatagramServer,而服务器运行模式有多进程ForkingMixin和多线程ThreadingMixin两种。

要创建多进程模式的TCPServer:

classMyTCPServer(TCPServer,ForkingMixin)

要创建多线程模式的UDPServer:

classMyUDPServer(UDPServer,ThreadingMixin):

如果没有多重继承,要实现上述所有可能的组合需要4x2=8个子类。

16、多态

用一个类继承多个类,调用同一个方法,会有不同的反应,因为被重写了。

17、鸭子类型

定义:“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。

这种风格适用于动态语言(比如PHP、Python、Ruby、Typescript、Perl、Objective-C、Lua、Julia、JavaScript、Java、Groovy、C#等)和某些静态语言

鸭子类型通常得益于不测试方法和函数中参数的类型,而是依赖文档、清晰的代码和测试来确保正确使用。从静态类型语言转向动态类型语言的用户通常试图添加一些静态的(在运行之前的)类型检查,从而影响了鸭子类型的益处和可伸缩性,并约束了语言的动态特性。

鸭子类型比接口更好用。

18、getattr()、setattr()和delattr():

getattr()和setattr()函数相应地取得和赋值给对象的属性,

getattr()会在你试图读取一个不存在的属性时,引发AttributeError异常,除非给出那个可选的默认参数。

setattr()将要么加入一个新的属性,要么取代一个已存在的属性。

delattr()函数会从一个对象中删除属性

1、__str__():把一个类的实例变成str

__repr__()转换为机器看的字符串,可以由eval()执行

2、比较运算符_cmp__():可以实现对一组Student类的实例排序

__eq__()判断等于,__lt__()判断小于,__gt__()判断大于

3、__len__():返回元素的个数

4、四则运算:__add__(),__sub__(),__mul__(),__div__()

逻辑运算__or__(),__and__()

5、类型转换:__int__(),__float__()

6、__slots__():限制当前类所能拥有的属性,能节省内存

7、__call__():

在Python中,所有的函数都是可调用对象。

一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。

1、time包基于C语言的库函数(libraryfunctions)。Python的解释器通常是用C编写的,Python的一些函数也会直接调用C语言的库函数。

%y两位数的年份表示(00-99)

%Y四位数的年份表示(000-9999)

%m月份(01-12)

%d月内中的一天(0-31)

%H24小时制小时数(0-23)

%I12小时制小时数(01-12)

%M分钟数(00=59)

%S秒(00-59)

%a本地简化星期名称

%A本地完整星期名称

%b本地简化的月份名称

%B本地完整的月份名称

%j年内的一天(001-366)

%U一年中的星期数(00-53)星期天为星期的开始

%w星期(0-6),星期天为星期的开始

%W一年中的星期数(00-53)星期一为星期的开始

6、获取某月日历

Calendar模块有很广泛的方法用来处理年历和月历,例如打印某月的月历:

8、datetime包

datetime包是基于time包的一个高级包,为我们提供了多一层的便利。

9、其他模块:pytz模块、dateutil模块

math.e#自然常数e

math.pi#圆周率pi

2、math包运算

math.ceil(x)#对x向上取整,比如x=1.2,返回2

math.floor(x)#对x向下取整,比如x=1.2,返回1

math.pow(x,y)#指数运算,得到x的y次方

math.log(x)#对数,默认基底为e。可以使用base参数,来改变对数的基地。

math.sqrt(x)#平方根

3、math包三角函数:

math.sin(x),math.cos(x),math.tan(x),math.asin(x),math.acos(x),math.atan(x)

这些函数都接收一个弧度(radian)为单位的x作为参数。

角度和弧度互换:math.degrees(x),math.radians(x)

4、random包

1)随机挑选和排序

random.choice(seq)#从序列的元素中随机挑选一个元素

比如random.choice(range(10))#从0到9中随机挑选一个整数。

random.sample(seq,k)#从序列中随机挑选k个元素

random.shuffle(seq)#将序列的所有元素随机排序

2)随机生成实数

random.random()#随机生成下一个实数,它在[0,1)范围内。

random.uniform(a,b)#随机生成下一个实数,它在[a,b]范围内。

5、decimal十进制浮点运算类Decimal

1、匹配字符串

str.startswith()和str.endswith()

或者用切片操作,str[:-1].endswith()

使用单个字符串来描述匹配一系列符合某个句法规则的字符串,是对字符串操作的一种逻辑公式,应用场景在处理文本和数据。

re模块使Python语言拥有全部的正则表达式功能。

3、导入re模块#importre

利用re.compile(正则表达式)返回pattern

利用pattern.match(待匹配字符串)返回match

match.group()返回子串

match.string()返回主串

match.span()返回子串在主串中的位置

4、re.match尝试从字符串的开始匹配一个模式。

re.match(pattern,string,flags=0)pattern匹配的正则表达式

string要匹配的字符串

flags标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等

匹配成功re.match方法返回一个匹配的对象,否则返回None。

5、group(num)或groups()匹配对象函数来获取匹配表达式。

group(num=0)匹配的整个表达式的字符串,group()可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。

groups()返回一个包含所有小组字符串的元组。

6、基本匹配符

①.匹配任意字符(除了\n),一个点只是一个字符

②[…]匹配字符集如[a-z][A-Z][0-9][a-zA-Z0-9]

③[^…]匹配不在[]中的任意字符

④\d匹配数字等价于[0-9]

⑤\D匹配非数字

⑥\s匹配空白,包括空格、制表符、换页符等等。等价于[\f\n\r\t\v]

⑦\S匹配非空白

⑧\w匹配单词字符,匹配包括下划线的任何单词字符。等价于[A-Za-z0-9_]

⑨\W匹配非单词字符

7、特殊匹配符

①*匹配前一个字符0次或无限次

②+匹配前一个字符1次或无限次

③?匹配前一个字符0次或1次

④{m}匹配前一个字符m次

⑤{m,n}匹配前一个字符m到n次

⑥*或+或匹配模式变为非贪婪(尽可能减少匹配字符)

①^匹配字符串开头

②$匹配字符串结尾

③\A指定的字符串必须出现在开头

④\Z指定的字符串必须出现在结尾

⑤|或,匹配左右任意一个表达式

⑥(ab)括号中表达式作为一个分组

⑦\引用编号为num的分组匹配到的字符串

⑧(P)分组起一个别名

⑨(P=name)引用别名为name的分组匹配字符串

9、其他方式

①search(pattern,string,flags=0)

会在字符串内查找模式匹配,直到找到第一个匹配

匹配成功re.search方法返回一个匹配的对象,否则返回None

②findall(pattern,string,flags=0)

找到匹配,返回所有匹配部分的列表

③sub(pattern,repl,string,count=0,flags=0)

将字符串中匹配正则表达式的部分替换为其他值

④split(pattern,string,maxsplit=0,flags=0)

根据匹配分割字符串,返回分割字符串组成的列表

正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位OR(|)它们来指定。

THE END
1.047Python面试知识点小结51CTO博客047 Python面试知识点小结 一.Python基础 1.Python语言特性: 动态型(运行期确定类型,静态型是编译型确定类型),强类型(不发生隐式转换,弱类型,如PHP,JavaScript就会发生隐患式转换) 2.Python作为后端语言的优缺点: 优点: 胶水语言,轮子多,应用广泛;语言灵活,生产力高https://blog.51cto.com/u_15127611/4740641
2.python基础知识汇总python期末个人总结资源python基础知识汇总 导航 登录 登录后您可以: 免费复制代码 关注/点赞/评论/收藏 下载海量资源 写文章/发动态/加入社区 立即登录 会员中心 消息 创作中心 学习中心成长任务 发布 版权申诉 python 基础知识 入门教程 5星· 超过95%的资源102 浏览量2021-01-02上传2.28MBPDFhttps://download.csdn.net/download/bala5569/14010591
3.一张图汇总Python基础知识一张图汇总Python基础知识 今天用一张思维导图汇总了Python基础知识,与大家分享。第一张图为总图,之后为总图的局部。 总图 局部1 局部2 局部3https://www.jianshu.com/p/e692bf226ad4
4.Python基础知识点总结.pdfPythonPython基础知识点总结.pdf 39页内容提供方:▄︻︼━┭──加勒比海盗 大小:3.12 MB 字数:约4.35万字 发布时间:2022-04-14发布于甘肃 浏览人气:130 下载次数:仅上传者可见 收藏次数:0 需要金币:*** 金币 (10金币=人民币1元)Python基础知识点总结.pdf 关闭预览 想预览更多内容,点击免费在线预https://max.book118.com/html/2022/0413/6150230023004134.shtm
5.python编程入门基础知识python编程入门基础知识 Python现在是越来越火爆,不仅是风靡世界,还直接进入了中小学生的课堂。所以有越来越多的人想要尝试编程了。 想到以前当我第一次用代码打出“Hello, world”的时候,那种兴奋激动之情,真的是难以言表。 不过很多同学在刚入门的时候,可能还是对Python有一种距离感,毕竟平时看到的编程代码可能都https://www.bunian.cn/17652.html
6.python入门基础知识len函数Python作为当下主流的后端编程语言之一,越来越被更多的企业广泛应用,Python行业广阔的发展前景吸引了很多人想要投身其中,通过Python课程培训机构学习专业的开发技能,今天八维职业学校和大家一起来看看python入门基础知识len函数,希望有助于大家学习,Python中的len函数是一个非常常用的函数,它用于返回一个对象的长度或元素的个https://www.bwie.com/index.php/jsgh/150.html