Python知识点总结(Python语言及其应用)

(这么辛苦总结,不点个赞,鼓励一下?)

计算机语言

机器语言,汇编语言,高级语言

高级语言:解释方式→逐条翻译

          编译方式→整体编译→目标程序→计算结果

Python运行方式

源代码→(python解释器)字码节→(python虚拟机)→机器指令

Python实现方式:CPython,Jython,IronPython

Python编程工具

IDLE:tkinterGUI组件创建的python程序。〔Alt+P〕向前,〔Alt+N〕向后,〔Alt+N〕打开新文件,F5运行程序

记事本:默认编码格式是ANSI

Python编程基础

基本结构:

代码块:缩进表示代码块

注释:【#】,【’’’   ‘’’】,【”””   “””】

语句续行:【\】之后不能有任何其他符号,包括空格和注释

          使用括号:括号中的空白和换行符都会被忽略

语句分隔:使用【;】分隔语句

关键字

大小写

基本输入和输出:

输入:var = input(‘提示字符串’),input函数将用户输入以字符串返回。如果需要输入整数或者小数,使用int(var)或float(var)函数进行转换

输出:print([obj1, obj2, …][, sep=’指定分隔符’][, end=’指定输出结尾符号’][, file=文件名]

sep参数默认为空格,end参数默认为【\n】换行符,file参数默认为sys.stdout标准输出流。

格式化:

旧格式化:string % data,string=’[+ | -][域宽][.][字符宽 | 小数点后位数]格式控制符’

新格式化:’{0} {1} {2}’.format(参数, 参数, 参数)

[位置参数0,1,2]:[填充字符][对齐字符<左 | >右 | ^居中][最大域宽][.整数不可选][小数点后位数 | 最大字符数]参数提示符

新格式化中无法对整数设定精度,旧格式化可以。

数字类型:

0B/0b,0O/0o,0X/0x

int(‘整数字符串’,n):将整数字符串按n进制转化成十进制数,整数字符串第一个字符可以是正负号,其余字符必须是数字,不能含小数点等。

float(‘数字字符串’)可含小数点

bin(),oct(),hex(),complex(实部,虚部)

小数

小数对象使用decimal模块中的Decimal函数来创建

可使用decimal.getcontext().prec = n来设置小数全局为n的精度。

使用with decimal.localcontext() as local:

           local.prec = n

语句设置临时精度。

分数:

分数使用fraction模块中的Fraction函数来创建

使用Fraction.from_float()函数将浮点数转化为分数。

内置数学模块]

abs(),bin(),hex(),oct(),chr(),ord(),divomd( , )→(商,余),eval(‘表达式’)→返回字符串中表达式的值

max(),min(),pow(x,y)→x**y,round(小数,n)→保留n为小数且“四舍五入”,“五”向偶数舍入,默认n为0。

math模块中的函数

pi,e,inf,-math.inf

math.ceil(x)→不小于x的最小整数

math.floor(x)→不大于x的最大整数

math.trunc(x)→x的整数部分

math.fabs()→与abs()功能相同,精度有区别

math.factorial(x)→非负数x的阶乘

math.fmod(x, y)→x % y结果为浮点数

math.fsum(x)→比sum()精确

math.gcd(x, y)→x和y的最大公约数

math.exp(x)→ex

math.expml(x)→ex-1

变量:变量没有数据类型概念。

命名规则:

不能以数字开头。

前后下划线为系统变量。

以单个下划线开头不能被from…import* 语句从模块中导入。

以两个下划线开头是类的系统变量。

四种赋值语句:简单赋值,序列赋值,多目标赋值,增强赋值

变量的共享引用:列表中的元素、字典中的值可变。

集合

集合中的元素是唯一、无序、不可变。

冻结集合frozenset( )不可变

使用set( )创建集合

基本操作:in

交集:&或set.intersection(set)

并集:|或set.union(set)

差集:-或set.difference(set)→出现在第一个集合但不出现在第二个集合

异或集:^或set.symmetric_difference(set)→仅在两个集合中出现一次

<=或set.issubset(set)→第一个集合中的所有元素都出现在第二个集合中。

>=或set.issuperset(set)→第二个集合中的所有元素都出现在第一个集合中。

copy( ), add(不可变类型:字符,元组), update(集合)→x=x&y

remove( ), discard( ), pop( ), clear( )

字符串:元素不可变

Raw字符串:rstring, Rstring,不会解析string中的转义字符。

bytes字符串:bstring

bytes字符串中只能包含ASCII码字符

使用索引时,bytes字符串返回对应字符的ASCII码。

bstring.hex( )→可用十六进制显示bytes字符串

Unicode字符串

字符串操作:len( ),in,+,*,for循环迭代

使用【,】分隔字符串时,会创建字符串组成的元组

切片:x[start:end:step],step为负时,返回字符串与原来的顺序相反

str( ),repr( ):效果相同,repr会将string中的引号添加到转换之后的string中。

字符串方法:

string.capitalize( )→首字母大写

string.count(sub[, start[, end] ] )→sub在string中的次数

string.endswith(sub[ ,start[, end] ] )→判断是否以sub结尾,True/False

string.startswith(sub[ start[, end] ] )

string.expandtabs(n)→一个tab字符串替换n个空格,默认为8个。

string.find(sub[, start[, end] ] )→返回sub第一次出现位置的偏移量,没有找到时返回-1。

string.rfind(sub[, start[, end] ] )→返回sub最后一次出现位置的偏移量,没有找到时返回-1。

string.index(sub[, start[, end] ] )→返回sub第一次出现位置的偏移量,没有找到时产生ValueError。

string.rindex(sub[, start[, end] ] )→返回sub第一次出现位置的偏移量,没有  找到时产生ValueError。

format_map( )→使用字典映射完成字符串格式化

string.isalnum( )→string为字母或数字时,返回True,否则返回False。

string.isalpha( )→string为字母时,返回True,否则返回False。

string.isdecimal( )→True:Unicode数字、全角数字(双字节)。False:罗马数字、汉字数字。Error:bytes数字(单字节)

string.isdigit( )→True:Unicode数字、bytes数字(单字节)、全角数字(双字节)、罗马数字。False:汉字数字。Error:无。

string.isnumeric( )→True:Unicode数字、全角数字(双字节)、罗马数字、汉字数字。False:无。Error:bytes数字(单字节)。

string. slower( )→字母全小写时返回True,可以包含数字

string.isupper( )→字母全大写时返回True

string.isspace( )→全空格时返回True

转换类:

string.lower( )→将string中的字母全部转换成小写

string.upper( )→大写

string.swapcase( )→大小写互换

string.title( )→所有单词开头字母大写

填充类:

string.rjust(width[, fillchar] )→字符串长度小于width时,开头填充fillchar,使之长度等于width。

string.ljust(width[, fillchar] )→末尾填充

string.zfill(width)→开头填充0,若第一个字符串为+或-,则在+或-之后填0。

删除类:

string.rstrip([char])→删除字符串首尾在char中的字符,未指定char时,删除首尾的空格、回车符、换行符。

string.rstrip([chars])→仅改变尾部

string.lstrip([chars])→仅改变开头

对齐:

string.center(width)→居中

string.ljust(width)→左对齐

string.rjust(width)→右对齐

分隔类:

string.split([sep],[maxsplit])→按sep指定的分隔符分解并返回分解后的列表,sep省略时,以空格作为分隔符,maxsplit指定分解次数,省略时全部。

string.partition(sep)→将字符串从sep第一次出现的位置分隔成三部分,并返回元组(sep之前,sep,sep之后)

string.rpartition(sep)→从末尾开始,没有找到sep时返回(‘’,’’,string)

文档字符串:

调用python函数help( )可以打印输出一个函数的文档字符串,把函数名传入函数help( )就会得到参数列表和规范的文档。

print(函数名.__doc__)

列表

Python中的数据可以分为四个类型

集合:集合中的元素无序、不可变。

数字:整数、浮点数、复数、分数,支持各种算数运算。

序列:字符串、列表、元组均支持索引、分片和合并等操作。

映射:字典,将键映射到值。

列表特点:

列表可变,列表中的对象可直接修改。

每个列表成员存储的是对象的引用,而不是对象本身。

基本操作:

len(lists),+,*,迭代,in,索引,分片

可通过嵌套列表来表示矩阵

常用方法:

lists.append( )

lists.extend( ),参数可为迭代对象

lists.insert( ),偏移量可以超过边界

lists.remove( ),删除列表中的指定值,如果有重复,则删除第一个。

lists.pop( ),删除指定位置对象并返回,默认删除列表中的最后一个并返回。

lists.del( ),删除对象或者删除分片对象

lists.clear( ),删除全部

lists.copy( )

lists.sort( ),数字从小到大,字符串按字典顺序排序,多类型出错。

lists.sort(reverse=True),降序

lists.reverse( ) ,位置反转

元组:

不可变列表

元组中存储的是对象的引用,而不是对象本身

元组基本操作与列表相同

元组方法:

tuple.count( ),返回指定值出现的次数

tuple.index(value, [start, [end] ] ),查找指定值并返回第一次出现的位置,未找到时出错。

命名元组:from collections import namedtuple

变量=namedtuple(“变量”,“域名 域名 …”)

变量1=变量(值,值,…)等价于变量1=变量(域名=值,域名=值,…)

字典

字典的键(key)为不可变类型

字典的值(value)为任意类型

字典通过键映射到值,通过键来索引映射的值。

字典属于可变映射,通过索引来修改键映射的值。

字典长度可变,其键映射的值也可以是一个字典。

字典存储的是对象的引用,而不是对象本身。

len(dict)即“键:值”对的个数,in,索引:可修改映射的值,试图修改不存在的键的映射值时,会添加“键:值”对。

del dict[key]:删除“key:value”对。

字典方法

dict.clear( ),dict.copy( )

set.setdefault(key, value):如果键不在字典中,新的默认值会被添加进去。如果把不同的默认值赋给已经存在的键,不会改变原来的值,仍将返回初始值。

dict.get(key[, default] )→返回键key映射的值,没有key时,返回default,若没有default则返回空值。

dict.pop(key[, default] )→删除key并返回映射的值或者default,否则出错。

dict.popitem( )→删除key:value,不添加key时,随机删除并返回key:value对元组,空字典时报错。

dict.setdefault(key[, default] )→返回key对应的value,若key不存在,则添加key:default,都省略时添加key:None。

dict.update(other)→添加key:value对,参数other可以是另一个字典或用赋值格式表示的元组。

字典视图:键视图dict_keys,值视图dict_values,键值对视图dict_items。

字典的items( ), keys( ), values( )方法用于返回字典对应的视图。

视图对象支持迭代操作,并可反映对字典的修改,不支持索引。

通常用list( )方法将视图对象转换为列表。

仅有键视图支持各种集合运算:-(差集),(并集),&(交集),^(对称差集)

有序字典OrderredDict( )记忆字典键添加的顺序,然后从一个迭代器按照相同的顺序返回。

推导式

列表推导式:[expression for item in iterable if condition]

字典推导式:{key_expression:value_expression for expression in iterable }

集合推导式:{expression for expression in iterable}

文件

myfile=open(filename[, mode] )

myfile为引用文件对象的变量,filename为文件名字符串,mode为文件读写模式。

myfile.close( )→关闭文件

myfile.flush( )→将缓冲期内容写入文件但不关闭文件

文件读写模式

w:写入新文件,若文件名已经在,则覆盖。

a:以追加方式在文件末尾写入文件,若文件不存在,则创建新文件。即使使用seek( )方法移动指针,内容依然被写入文件末尾。

r:读文件,省略mode时,默认为读文件。

x:表示在文件不存在的情况下创建新文件,若文件已存在,则报错。

b:组合使用(wb,ab,rb)表示读写二进制文件。

+:用在模式末尾,表示同时进行读写操作,w+,r+。

以w或a方式打开文件时,文件指针指向文件末尾

以r方式打开文件时,文件指针指向文件开头

文本文件读写方法

myfile.read(n)→把n个字符读进一个字符串,n省略时为整个文件内容。

myfile.readline( )→将换行符之前的内容读入一个字符串,读出内容包括换行符(\n)。

myfile.readlines( )→把整个文件内容读入一个字符串列表,每行包括换行符(\n)为一个字符串。

myfile.write(string)→将string写入文件指针位置,并返回写入的字符个数。

myfile.writelines(list)→将list写入文件指针位置,并返回写入的字符个数,list对象必须都是字符串。

myfile.seek(n)→将文件指针移动到n个字节,0表示指向文件开头。seek(offset, origin),origin等于0,默认为0。Origin为2,从结尾处开始,origin为1,从当前位置开始。

myfile.tell( )→返回文件指针当前位置。

for line in myfile →迭代方式读取文件时,每次读一行,不包括换行符(\n),第二次会仅读出换行符(\n)。

pickle模块处理文件中对象的读写

pickle.dump(对象,myfile)

var=pickle.load(myfile)→读一次文件

生成器

生成器函数和普通函数类似,但是它返回值使用yield语句而不是return。

默认参数:

默认参数值在函数被定义时已经计算出来,当把可变数据类型(列表、字典)当作默认参数时,默认参数值在函数被调用之前已经改变。

位置参数(*args):

当参数被用在函数内部时,星号(*args)将一组可变数量的位置参数收集到元组中。

使用两个星号(**kwargs)可以将参数收集到一个字典中,参数的名字是字典的键(key),对应参数的值是字典的值(value)。

函数

def 函数名(参数表):

函数语句

return 返回值

可以通过赋值来传递参数

*var可接收任意个数参数,这些参数保存在一个元组中,*var之后的参数必须通过赋值

lambda函数→lambda 参数表:表达式

变量作用域:

内置作用域>文件作用域>函数嵌套作用域>本地作用域

作用域隔离原则:遵循本地优先

global全局变量,nonlocal外部本地变量

Python使用iter( )函数来生成可迭代对象的迭代器,然后对迭代器调用next( )函数来遍历对象。字典只能迭代键,文件对象有自己的迭代器__next__,也可以用next( )函数调用文件对象的迭代器。

zip( )函数:zip函数参数为多个可迭代对象,每次从每个可迭代对象中取出一个值组成元组,返回结果包含在生成器中。

map(函数名,对象)→将可迭代对象中的每个元素都应用该函数,返回结果包含在生成器中。

filter(函数名,对象)→对可迭代对象中的每个元素应用该函数,若该函数返回值为真,则该元素返回到生成器结果中。

模块

导入模块

import 模块名称

import 模块名称 as 新名称

from 模块名称 import 导入对象名称→多个对象之间用逗号(,)隔开

from 模块名称 import 导入对象名称 as 新名称

from 模块名称 import*→导入模块顶层的全局变量和函数,可在模块中使用__all__设置使用from 模块名称 import*语句时导入的变量名,不管是否以下划线开头均会被导入,而不在__all__列表中的变量名则没有导入。

  Python在imp模块中提供了reload( )函数来重新载入并执行模块代码,使用reload( )重载模块时,如果模块文件已经被修改,则会执行修改后的代码,如果模块还没有被导入,执行reload( )重载则会出错。

  在作为导入模块使用时,模块__name__属性值为模块文件的主名,当作为顶层模块直接执行时,__name__属性值为__main__。

使用模块的包路径中,“.”表示包含from导入命令的模块文件所在的路径,“..”表示包含from导入命令的模块文件所在路径的上一级目录。

异常处理

异常处理基本结构        

 

try:

可能引发异常的代码

except(异常类型名称,) as exp:

异常处理代码块

try:

可能引发异常的代码

except 异常类型名称:

异常处理代码

except 异常类型名称:

异常处理代码

else:

没有异常时执行的代码

finally:

必执行代码

 

 

  

import traceback

traceback.print_tb(exp.__traceback__)

exp→输出异常信息

exp.__class__.__name__→输出异常类型名称

还可以使用

x=sys.exc_info( )方法返回一个三元组(type, value, traceobj)

type为异常类型名称,type.__name__属性可获得异常类型名称,value为异常类型实例对象,traceobj是一个堆栈跟踪对象,可使用traceback模块的print_tb(x[z])来获得堆栈跟踪信息。

主动引发异常

raise 异常类型名称

raise 异常类实例对象

assert 测试表达式,data

“测试表达式”的值为假时,引发Assertion Error异常,data作为异常描述信息。

程序流程控制

 

if 条件测试表达式:

    语句块

elif 条件测试表达式:

语句块

else:

    语句块

比较和相等测试返回bool值(True,False)

逻辑运算:and返回第一个假对象,若无则返回最后一个对象,or返回第一个真对象,若无则返回最后一个假对象。

 

 

 

else部分只在正常结束循环时执行,如果用break跳出循环,则不会执行else部分。

break语句用于跳出当前循环,continue语句用于跳过循环体剩余语句,回到循环开头开始下一次循环。

面向对象编程

  类封装了对象的行为和数据,Python类中的变量就是对象的数据,函数就是对象的行为,函数也称方法。

  类对象在执行class语句时创建,而实例对象是在调用类的时候创建,每调用一次类,便创建一个实例对象。

  通过实例对象调用方法时,当前实例对象作为一个参数传递给方法。

可以通过_类名__属性名或_类名__方法名( )

构造函数:

__init__为构造函数,在创建实例对象时自动调用,完成实例对象初始化。

析构函数__del__在实例对象被回收时调用。

在子类__init__中可以使用super( ).__init__(父类特性名)来继承父类的初始化特性,当父类中的特性改变时,这些改变自动反映到子类上。

@property→用于指示getter方法,@特性名.setter→用于指示setter方法。

var=property(方法名1,方法名2)→将方法名作为特性访问

  使用实例名.var可以直接调用方法1,或者实例名.方法名1( )。当对var特性执行赋值操作时,方法2会被调用,没有赋值操作时不能调用。也可以显式调用方法2,实例名.方法2( )。

方法类型:

实例方法:首个参数是self。

类方法:用前缀装饰器@classmethod指定的方法都是类方法,类方法的首个参数一般为cls。

静态方法:用前缀装饰器@staticmethod,指定的方法不需要参数。

 

Unicode:

编码是将字符串转化为一系列字节的过程。

字符串的encode( )函数所接收的第一个参数是编码方式名:’ascii’, ‘utf-8’, ‘latin-1’, ‘cp-1252’, ‘unicode-escape’。

encode( )函数可以接受额外的第二个参数来帮助你避免编码异常,默认值是’strict’,’ignore’会抛弃任何无法进行编码的字符,’replace’会将所有无法进行编码的字符替换为?。string.encode(编码方式,可选参数)→字节

 

解码是将字节序列转化为unicode字符串的过程。

我们从外界文本源(文件、数据库、网站、网络API等)获得的所有文本都是经过编码的字节串,重要的是需要知道它是以何种方式编码的。

字节.decode(编码方式)→unicode字符串。编码方式:’ascii’, ‘utf-8’, ‘latin-1’, ‘cp-1252’。

使用struct转换二进制数据

struct.unpack( )正确解读字节序列并将它们组装成python中的数据类型。

struct.pack( )将python数据转换成字节。

 

正则表达式

import re

result = re.match(模式字符串, 源字符串),模式字符串前添加字符r,match( )函数用于查看源是否以模式开头。

可以先对模式进行编译以加快匹配速度:youpatten = (模式字符串),result = youpatten.match(源字符串),结果存于result.group( )

search( )会返回第一次成功匹配并存于result.group( )

findall( )会返回所有不重叠的匹配,直接返回列表。

split( )会根据patten将source切分成若干段,返回由这些片段组成的列表。

sub( )还需要一个额外的参数replacement,它会把source中所有匹配的patten改成replacement。

result = re.split(patten, source, maxsplit=0, flags=0)

result = re.sub(patten, replacement, source, count=0, flags=0)

模式标识符:

‘ . ‘代表任何单一字符,’ .? ‘表示0个或一个。(不含\n)

‘ * ‘代表任意一个它之前的字符,’ .* ‘代表任意多个字符(包含0个)。

‘ ? ‘代表0个或1个。

特殊字符(大写表示非):

\d 一个数字字符

\w 一个数字或字母或下划线

\s 空白符:’ ‘,’\t’,’\n’,’\r’。

\b 单词边界

关系数据库

4种模型:层次模型、网状模型、关系模型、对象模型。

关系模型:用二维表格表示数据及数据联系

关系数据库语言SQL

创建:创建数据库:creat database 表名,drop database 表名

创建表:creat table 数据库名.表名(字段名| 字段数据类型(长度) sql约束,…

      creat table user(name varchar(10), birth data)

约束表:NOT NULL , UNIQUE(CONSTRAINT), PRIMARY KET , FOREIGN KEY, CHECK, DEFAULT)

修改表 alter table 表名 PENAME TO 新表名

添加字段 alter table 表名 add COLUMN字段名 字段数据类型(长度)

修改字段 alter table 表名 PENAME 字段名 TO 新字段名

修改字段类型 alter table 表名 alter COLUMN 字段名 字段类型(长度)

删除表 drop table 表名

删除字段 alter table 表名 DROP COLUMN字段名

删除表中全部记录 truncate table 表名

                 delete from 表名 where 条件表达式(无where则等同于 truncate table 表名)

创建索引 create index

执行查询:select 字段列表(*表示全部,字段名间用逗号隔开) from 表名

                [group by 分组的条件]

                [where 筛选的条件]

                [order by 字段列表[ASC|DESC]]排序

指示字段名:旧字段名 as 新字段名,DISTINCT 去掉重复值

select …into 语句:select *into 新字段列表名 from 表名

添加记录insert:insert into 表名(字段名 字段类型(长度),…)values(数据1,…)

修改记录update(用于修改字段名值): update 表名 set 字段名=新值,…,where 条件表达式。

 

SQLite数据库

SQLite是python自带文件型关系数据库

创建连接SQLite

conn = sqlite3.connect(SQLite数据库文件名)

curs = conn.cursor( )

变量 = curs.execute(insert into 表名 字段名( )

内存数据库:”:memory:”, 临时数据库:” “。

创建临时表:create temp table

cursor( )对象的execute( )方法执行create table创建表

executemany( )方法添加多条记录

curs.rowcount属性查看影响的记录行数

变量.commit( )提交修改

变量.rollback( )回滚撤销

游标对象curs的fetchall( ),fetchmany(n),fetchone( )方法提取记录

cors.description属性查询各列的名称

 

MySQL数据库

连接MySQL服务器,创建连接对象

mysql.connector.connect( )函数

nysql.connector.MySQLConnection类

建立连接→查看连接→测试连接→修改连接→重建连接→关闭连接

 

 

 

 

猜你喜欢

转载自blog.csdn.net/GongShiShen/article/details/82869233