一看草稿里文章都堆积几十篇了,清理库存1~
一直都想把关于python的知识点总结一下,因为基础不牢,地动山摇啊。切忌眼高手低,好记性总是不如烂笔头,趁着十一假期,就把平常参考资料中的琐碎知识点总结总结。别人有大众的菜鸟教程,我这也算是自己的菜鸟教程吧。。。。。
2 、Python基础语法
2.1缩进规则
行尾的“:”表示下一行代码缩进的开始。缩进只使用空白实现,必须使用4个空格来表示每级缩进。
2.2 注释
- 单行注释。 以#开头。
- 多行注释。 该类注释标记成对出现。有两种方式:(a)用3个单引号 ''' 将注释括起来。(b)用3个双引号 """ 将注释括起来。
【注意】:注释不可以嵌套。
在使用中文注释时,在文件开头声明是中文编码格式。在文件开头加上如下代码:
#coding=utf-8
#coding=gbk
2.3 编码
编码:计算机编程语言的代码。计算机只能处理数字,必须要将处理的文本、图片等信息转换为数字。
- GB2312编码:适用于中文汉字处理。
- GBK编码:汉字编码标准之一。
- Unicode编码:是一种世界上所有字符的编码。该编码能把所有语言都统一到一套编码里,这样就不会出现乱码的问题。
- UTF-8编码:是一种可变长的编码方式。
ASC
默认情况下,python源码文件以UTF-8格式进行编码,所有字符串都是Unicode字符串。
2.4 标识符和关键字
python语言的标识符使用规则和C语言类似。
- 第一个字符必须是字母或下划线_。
- 区分大小写
- 标识符不能以数字开头
【注意】:以一个下划线开始的标识符(如_foo)不能用from module import语句导入。
前后均有两个下划线的标识符(如__init__)被特殊方法保留。
前边有两个下划线的标识符(如__bar)用来实现类私有属性。
2.5 变量
python 中没有常量,没有提供如Java、C语言、C++设定的const修饰符。
变量命名规则:
- 变量可以包括字母、数字、下划线,但是不能用数字作为开头
- 变量不能包含空格,但可以使用下划线来分割其中的单词。如grade_name是合法的,但grade name是不合法的。
- 关键字不能做变量名使用
- 不能将内置函数名用作变量名
- 除了下划线之外,其他符号不能用作变量名
- python变量名区分大小写,但一般使用小写来命名
- 变量在使用前必须先赋值,变量赋值以后才会创建该变量
变量可以存储规定范围内的值,并且值可以改变。python中的变量不需要声明,变量的赋值操作即是声明和定义变量的过程。变量的赋值不需要声明类型。每个变量在内存中创建都包括变量的标识、名称和数据这些信息。
输出:
在python中,一次新的赋值将创建一个新的变量。即使变量的名称相同,变量的标识(id(变量):内存地址号,唯一且不变)也不相同。
python支持对多个变量同时赋值。
2.6 输入和输出
输入:内置函数input()实现输入功能。
【注意】函数input不管输入的是什么,最终返回的都是字符串。如果需要输入数值,必须经过类型转换。
输出:函数print()格式如下:
print(value,...,sep=‘ ’,end=‘n’)
- value 以及后面的省略号代表多个要输出的信息。
- sep 代表多个要输出信息的分割符,默认值为一个空格。
- end 默认为换行符。
【注意】当print中的多个字符串使用逗号“,”隔开时,会在每个输出项后面自动添加一个空格,从而输出一串字符。
print遇到逗号“,”时,就会输出一个空格。
print也可以输出整数或计算结果。
3、简单数据类型
3.1 python 中的数据类型
在python中,变量没有类型。通常所说的“类型”是变量所指的内存中对象的类型。基本数据类型有:数字、字符串、列表、元组、字典。
3.2 字符串
可以使用单引号或者双引号来创建字符串。
3.2.1 访问字符串
可以通过序号(序号从0开始)来取出其中的某个字符。
3.2.3 转义字符
当需要在字符串中使用特殊字符时,需要用到以反斜杠“”表示转义字符。常用的转义字符如下:
- (在行尾时) 续行符
- 反斜杠
- n 换行符
- ' 单引号
- " 双引号
- t 横向制表符
- v 纵向制表符
- r 回车符
- e 转义
如果不想让上面的转义字符生效,而只是想显示字符串原来的意思,就要使用r和R来定义原始字符串。
3.2.4 格式化字符串
在字符串中需要格式化的地方一律用“%”表示。当输出的时候,在“%”的左侧放置一个字符串(需要格式化的字符串),右侧放置需要用来格式化字符串的值(可以是一个数字或者一个字符串,也可以是包含多个值的元组或者字典)。
【注意】“%”和用来格式化字符串的值的个数必须相同。
常用字符串格式化符号:
- %s 格式化字符串
- %d 格式化整数
- %f 格式化浮点数字,可指定小数点后的精度
- %e 用科学计数法格式化浮点数
3.3 数字类型
在python中,数据类型是不允许改变的。如果要改变数据类型的值,将重新分配内存空间。
从python3开始,只支持int,float,bool,complex(复数)共计4种数字类型,删除了python2中的long(长整数)类型。
布尔型:
布尔型是关系运算的返回类型。布尔的取值只有True(1)和False(0)。
布尔值可以用and 、or、not进行计算。
4.1 运算符和表达式
运算符:具有运算功能的符号。
表达式:由值、变量和运算符组成的式子。
python显示表达式的值时,显示的格式与输入的格式是相同的。
4.2 算术运算符
- / 除运算符
- % 取模运算符,返回除法的余数
- ** 幂运算符
- // 返回商的整数部分,不包含余数
4.3 比较运算符合比较表达式
比较运算符也称为关系运算符,使用关系运算符可以表示两个变量或常量之间的关系。
关系表达式:用关系运算符将两个表达式连接起来的式子,被连接的表达式可以是算术表达式、关系表达式、逻辑表达式和赋值表达式等。
python 中有6个比较运算符:
- == 用于比较对象的值是否相等
- != 用于比较对象的值是否相等(a!=b)返回True
- >
- <
- >=
- <=
4.4 赋值运算符和赋值表达式
可以为多个变量赋值: a=b=c=1
可以为多个对象指定多个变量:a, b, c = 1, 2, "浪潮"
复合赋值运算符:在赋值运算符“=”之前加上其他运算符。对赋值运算符左右两边的运算对象进行指定的算术运算符运算,再将运算结果赋予左边的变量。Python中共有7种复合赋值运算符,包括:+=、-=、=、/=、%=、**=、//=
- += c+=a 等效于 c=c+a
- %= c%=a等效于c=c%a
4.5 位运算符和位表达式
位运算符:可以操作二进制数据(也即把数字看作二进制来进行计算)。
python 共有6个位运算符:
- & 与。相应位数相同为1,相异为0。
- | 或。相应位数有1个为1,结果为1。
- ^ 异或。相应位数相同为0,相异为1。
- ~ 取反。对每个二进制位数取反,即把1变为0,把0变为1。
- << 左移运算符。
- >> 右移运算符。
4.6 逻辑运算符和逻辑表达式
Pyhton中只能将 and、or、not 三种运算符用作于逻辑运算。
- and 所有值均为真,则返回后一个值。如果存在假值,则返回第一个值。
- or 返回第一个为真的值。
4.7 成员运算符和成员表达式
成员运算符:用来验证给定的值(变量)在指定的范围里是否存在。
python 有两个成员运算符,都返回布尔类型:
- in 存在返回True,否则返回False
- not in 不存在返回True,否则返回False
4.8 身份运算符和身份表达式
身份运算符:用来比较两个对象是否是同一个对象。
- is 通过id来进行判断
- is not
python中变量有3个属性:name(变量名),id(内存地址:不变且唯一),value(变量的值)。
比较运算符“=”与身份运算符“is”对比:
- == :用来比较两个对象是否相等,value作为判断因素。
- is : 用来比较两个对象是否相同,id作为判断因素。
5.条件语句
5.1 if语句
条件语句是一种选择结构。通过if关键字实现,所以也称为if语句。
注意与其他语言的区别:
- C++或Java中if语句结构
if(condition)
{
执行语句;
}
- python中if语句
if(condition):
执行语句
【注意】:在C++或Java等高级语言中,如果条件的值为0或者引用的对象为空指针,那么该条件即为False。在Python中,如果条件为“、( )、[ ]、{ }、None、set( ),那么该条件为False,否则为True。
if语句有三种:if语句、if...else 语句、if...elif...elif(中间可以编写多个elif,以缩进来区分表示同一范围)...else 语句。
嵌套的if语句,写法上与不嵌套的if语句在形式上的区别就是缩进不同而已。python 中不提供switch功能,但可以通过 if嵌套、字典、类实现类似的Switch功能。
使用字典来实现switch功能:
6 、循环语句
主要有3种循环语句,分别是for 循环、while 循环语句和循环控制语句。
与Java、C语言相比,这些语言中的循环语句需要用循环变量来控制循环,而Python中的for循环语句通过循环遍历某一序列对象(如元组、列表、字典等)来构建循环,循环结束的条件就是对象遍历完成。
格式:
for 循环变量i in 遍历对象(元组、列表、字典):
执行语句
【注意】遍历for 语句中的遍历对象,每经过一次循环,循环变量就会得到遍历对象中的一个值。当遍历对象中的值全部用完时,就会自动退出循环。
6.1.2 通过序列索引迭代
在python中,通过序列索引迭代的方式循环功能。在具体实现时,可以借助于内置函数range()实现。通过range()函数产生一个整数列表,这样可以完成计数循环功能。
range()语法格式:
range(start起始数,stop终止数,step步长)
产生的整数序列的最大值为stop-1。
6.1.3 使用for...else 语句
else中的语句在for中的语句中正常执行完(就是遍历完所有遍历对象的值时)的情况下才执行。
for 循环变量i in 遍历对象(元组、列表、字典):
执行语句1
else:
执行语句2
7、列表
列表也称为序列。序列中的每个元素都分配一个数字,这个数字表示这个元素的位置或索引。列表用中括号“[]”表示,并用逗号开分割其中的元素。列表中的元素不需要有相同的数据类型。
7.1.1 创建数字列表
7.1.2 访问列表中的值
因为列表是个有序集合,所以要访问列表中的元素,可以指出列表的名称,再指出元素的索引,并将其放到方括号“[]”内,就可以进行访问了。当访问列表中的元素时,python会返回该元素,而不包括方括号和引号。此外,还可以通过序号(序号从0开始)来取出其中的某个字符。
通过将索引指定为“-1”,可以返回列表中的最后一个元素。
7.2 列表基本操作
7.2.1 更新列表元素
需要指定列表名和将要修改的元素的索引,再指定该元素的新值。
7.2.2 插入新的元素
使用方法insert()可以在列表的任何位置添加新元素,在插入时指定新元素的索引和值。格式为:list.insert(索引值index,要插入的列表元素obj)
在列表末尾添加元素:使用方法append()。格式:list.append(要插入的元素obj)。
7.2.3 在列表中删除元素
有多种方式:
(a)、使用del语句可以删除任何位置的元素,前提条件是知道这个要删除元素的索引值。该种方式删除后,不能再以任何方式使用。
(b)、使用pop()可以删除任何位置元素,并且能够接着使用它。
删除末尾的语法格式:list.pop(obj=lsit[-1])
(c)、可以使用remove()方法,实现根据元素值删除元素。该方法会删除某个值在列表中的第一个匹配项,并且可以接着使用这个元素的值。
7.3列表排序
7.3.1 使用方法sort()对列表进行永久性排序
sort()方法用于对原列表中的元素进行排序。格式为list.sort( )。
通过向方法sort()中传递参数reverse=True,可以将列表按与字母相反的顺序排列列表元素。
7.3.2使用方法sorted()对列表进行临时排序
方法sorted()功能是按照特定顺序显示列表中的元素,同时不影响它们在列表中的原始排列顺序。
7.3.3倒序输出列表中的信息
通过方法reverse()实现。该方法没有参数,也没有返回值。
7.3.4 获取列表长度
使用len(list)方法快速获取列表长度。
7.4 列表高级操作
python 中,在列表中可以使用“+”和“*”运算符,这两个运算符的功能与在字符串中相似。其中“+”运算符用于组合列表,“*”运算符用于重复输出列表。
7.4.2 列表嵌套
列表嵌套是指在一个已经存在的列表中创建其他新的列表。
7.4.4 获取列表元素中的最大值和最小值
获取列表中的最大值: max(lsit)
获取列表中的最小值: min(lsit)
7.4.5 追加其他列表中的值
通过方法extend()在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表),也即可以在已存在列表中添加新的列表元素值。
格式为:list.extend(seq)。该方法没有返回值,参数seq是将要追加的列表。
【注意】extend()方法是将各列表合并为一个列表,注意与列表嵌套的区别。
7.4.6 在列表中统计某元素出现的次数
通过方法count()在列表中统计某元素出现的次数。格式为list.count(obj),参数obj为表示将要统计的列表元素。
7.4.7 清空列表中的元素
使用方法clear()清空列表中的元素。格式为:list.clear(),其功能类似于“del list[:]”表达式。方法clear()没有参数也没有返回值。
7.4.8 复制列表中的元素
使用方法copy()实现复制列表中的元素。格式为:list.copy(),该方法没有参数,返回复制后的列表。
7.4.9 获取列表中某个元素的索引
使用方法index()获取列表中某个元素的具体索引位置,只能从列表中找出某个元素值第一次出现的索引位置。
格式为:list.index( obj)。其中参数obj表示将要查找的列表对象。方法index()返回查找列表对象的索引位置,如果没有找到对象则抛出异常。
例:实现列表中重复元素出现的索引位置
给定一个列表a=[3,4,5,6,6,5,4,3,2,1,7,8,8,3],请设计一个函数,实现传入一个target=3,输出3这个元素在列表a中的索引,输出格式如下:[0,7,13]
【注】enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据下标和数据,一般用在 for 循环当中。
8、使用元组、字典和集合
8.1 元组
可以将元组看作一种特殊的列表。元组中的元素也可以是不同的数据类型,下标索引也是从0开始,并且可以进行截取和组合操作。与列表不同的是,元组内的数据元素不能发生改变。不但不能改变其中的数据项,而且也不能添加和删除数据项。
创建元组的基本形式是以小括号“()”将数据元素括起来,各个元素之间用逗号“,”隔开。当元组中只包含一个元素时,需要在元素后面添加逗号“,”。
元组之间可以使用“+”号和“*”号进行运算,也即可以对元组进行组合和复制。
8.1.2 修改元素
元组一旦创立后是不可以修改的。但是在实际应用中,开发者可以使用“+”号对元组进行连接组合。也可以给存储元组的变量赋值,这样可以达到简洁修改元组的目的。
8.1.3 删除元组
虽然不允许删除元组中的某个元素值,但可以通过使用del 语句来删除整个元组,且删除后不能再使用。
8.1.5 使用内置方法操作元组
- len(tuple)
- max(tuple)
- min(tuple)
- tuple(seq):将列表转换为元组
8.2 使用字典
字典中每个成员以“键:值”对的形式成对存在。与列表相比,字典中元素是无序的。在字典中通过键来访问成员,而不能通过其位置来访问该成员。
字典可以存储任意类型对象,字典中的每个键值对必须以冒号“:”分割,每对之间用逗号“,”分割,整个字典包含在大括号“{ }”之中。具体使用要注意以下准则:
- 使用键来访问与之相关联的值
- 字典中可以存储任意个“键:值”对
- 键值对中的键(key)必须是唯一的、不可变的,但值不必如此
- 键值可以取任何数据类型
8.2.2 向字典中添加数据
字典是一种动态结构,可以随时在其中添加键值对。在添加“键值”对时,需要首先指定字典名,然后用中括号将键括起来,最后写明这个键的值。
8.2.3 修改字典
修改字典的值,首先指定字典名,然后使用中括号把将要修改的键和新值对应起来。
8.2.4 删除字典中的元素
可以使用del 语句将相应的“键值”对信息彻底删除。在使用del 语句时,必须指定字典名和要删除的键。
8.2.5 创建空字典
使用大括号“{ }”创建。如果向里面添加元素,则分行添加各个“键值”对。
8.2.6 和字典有关的内置函数
8.3 遍历字典
可以通过多种方式遍历字典。
8.3.1 一次性遍历所有的“键值”对
可以使用for ... in 循环语句一次性遍历所有“键值”对。
8.3.2 遍历字典中的所有键
使用内置方法keys()能够以列表的形式返回一个字典中的所有键。
格式为:dict.keys()。方法keys()没有参数,只有返回值,返回字典中的所有键。
【注意】当遍历字典时,会默认遍历所有的键。
8.3.3 按序遍历字典中的所有键
要想以特定的顺序返回字典中的元素,最简单的方法是在for循环中使用内置函数sorted()对返回的键进行排序。
8.3.4 遍历字典中的所有值
可使用方法values()以列表的方式返回一个字典中的所有值,而包含任何键。
格式为 dict.values( )。方法values()没有参数,只有返回值,返回字典中的所有值。
【注意】上述这种在提取字典中的值方法并没有考虑是否重复的问题。为剔除重复项,可以使集合(set)。集合类似于列表,但每个元素必须是独一无二的。
8.4 字典嵌套
有时候需要将字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套。
8.4.1 字典列表
例:将字典存储在列表中(也即将字典作为列表中的元素)
8.4.2 在字典中存储字典
也即作为字典中的值可以以字典的方式。
8.4.3 在字典中存储列表
字典中的值可以是字符串、列表。
8.5 使用其他内置方法
8.5.1 使用方法clear()清空字典
方法clear()可以删除字典内的所有元素。
格式为 dicr.clear( )。 该方法没有参数也没有返回值。
8.5.2 使用 方法copy()复制字典
格式为:dict.copy( ) 。该方法没有参数,但是有返回值。
8.5.3 使用方法fromkeys()创建新字典
格式为:dict.fromkeys(seq, value)
其中,参数seq 表示字典键值列表,参数value 是一个可选参数,用于设置键序列(seq)的值。方法fromkeys()的返回值是一个列表。
8.5.4 使用方法get()获取指定的键值
使用方法get()可以返回字典中某个指定键的值。如果键不在字典中,则返回默认值。
格式为:dict.get( key, default=None)。其中参数key表示在字典中需要查找的键,参数default表示如果指定的键不存在,则返回该默认值。
8.5.5 使用方法setdefault()获取指定的键值
方法setdefault()与 get()的功能类似,可以返回字典中某个指定键的值。如果键不在字典中,则会添加键并将值设为默认值。
格式为:dict.setdefault( key, default=None)。该方法没有返回值。
8.5.6 使用方法update ()修改字典
格式为:dict.update(dict2) 表示把字典dict2 的“键值对”更新(添加)到字典dict 中。方法update()没有返回值。
8.6 使用集合
集合set是个无序、不重复元素的序列。集合的基本功能是进行成员关系测试并删除重复的元素。使用大括号“{ }”或函数set ()创建集合。
【注意】在创建一个空集合时必须使用函数set()实现,而不能使用大括号“{ }”实现。这是因为空的大括号“{ }”是用来创建一个空字典的,而不是创建空集合的。
8.7 类型转换
对数据类型进行转换时,只需要将数据类型作为函数名即可。
- str(x)将对象x转换为字符串
- list (s)将序列s转换为列表
- set(s)转换为可变集合
- dict(d)创建一个字典,d必须是一个序列(key,value)元组
##############未完待续################