类型的概念:
类型是编程语言对数据的一种划分。
Python语言的类型:
数字类型、字符串类型、元组类型、列表类型、文件类型、字典类型。
数字类型:
数字类型对Python语言中数字的表示和使用进行了定义和规范。
Python语言包括三种数字类型:
- 整数类型:与数学中的整数概念一致,没有取值范围限制。
- 浮点数类型:Python语言中浮点数的数值范围存在限制,小数精度也存在限制。这种限制与在不同计算机系统有关。一般计算机范围为,从10的-308次方 —到10的308次方,小数点后精度可达53位。
- 复数类型:与数学中的复数概念一致,z = a + bj , a是实数部分,b是虚数部分,a和b都是浮点类型,虚数部分用j 或者J标识。例:12.3+4j。对于复数z,可以用z.real获得实数部分,z.imag获得虚数部分。
数字类型之间的关系:
三种类型存在一种逐渐“扩展”的关系:
整数 -> 浮点数 -> 复数 (整数是浮点数的特例,浮点数是复数的特例)
不同数字类型之间可以进行混合运算,运算后生成结果为最宽类型。
数字类型的转换:
三种类型可以相互转换,函数:int(), float(), complex().
示例:
- int(4.5) = 4 (直接去掉小数部分)
- float(4) = 4.0 (增加小数部分)
- complex(4) = 4 + 0j
数字类型的判断:
函数:type(x),返回x的类型,使用与所用类型的判断。
示例:
1 | 5.2) type( |
数字类型的运算:
运算符和运算函数 | 操作含义 |
---|---|
x//y | 不大于x与y之商的最大整数 |
x%y | x与y之商的余数 |
x **y | x的y次幂 |
abs(x) | x的绝对值 |
divmod(x,y) | (x//y,x%y) |
pow(x,y) | x的y次幂 |
字符串类型:
- 字符串是用双引号””或者单引号’’括起来的一个或多个字符。
- 字符串可以保存在变量中,也可以单独存在。
- 可以用type()函数测试一个字符串的类型。
- Python语言转义符: \。
- 输出带有引号的字符串,可以使用转义符。
- 使用\ 输出带有转移符的字符串。
字符串操作:
- 字符串是一个字符序列:字符串最左端位置标记为0,依次增加。字符串中的编号叫做“索引”
- 单个索引辅助访问字符串中的特定位置 。格式为: < string >[< 索引 >]。
- Python中字符串索引从0开始,一个长度为L的字符串最后一个字符的位置是L-1
- Python同时允许使用负数从字符串右边末尾向左边进行反向索引,最右侧索引值是-1。
- 可以通过两个索引值确定一个位置范围,返回这个范围的子串。格式: < string >[< start > : < end >]。
- start和end都是整数型数值,这个子序列从索引start开始直到索引end结束,但不包括end位置。
- 字符串之间可以通过+或*进行连接。
- 加法操作(+)将两个字符串连接成为一个新的字符串。
- 乘法操作(*)生成一个由其本身字符串重复连接而成的字符串。
- len()函数能否返回一个字符串的长度。
- 大多数数据类型都可以通过str()函数转换为字符串。
字符串操作示例:
1 | "hello" str1 = |
字符串使用实例:
输入一个月份数字,返回对应月份名称缩写
这个问题的IPO模式是:
- 输入:输入一个表示月份的数字(1-12)
- 处理:利用字符串基本操作实现该功能
- 输出:输入数字对应月份名称的缩写
1 | #month.py |
字符串的处理方法:
操作 | 含义 |
---|---|
+ | 连接 |
* | 重复 |
< string >[ ] | 索引 |
< string >[ : ] | 剪切 |
len(< string >) | 长度 |
< string >.upper() | 字符串中字母大写 |
< string >.lower() | 字符串中字母小写 |
< string >.strip() | 去两边空格及去指定字符 |
< string >.split() | 按指定字符分割字符串为数组 |
< string >.join() | 连接两个字符串序列 |
< string >.find() | 搜索指定字符串 |
< string >.replace() | 字符串替换 |
for < var > in < string > | 字符串迭代 |
可以通过for 和in 组成的循环来遍历字符串中每个字符。
1 | 格式:for < var > in < string >: 操作 |
字符串的格式化方法:
Python语言中提供两种字符串的格式化方法。一种类似C语言的格式化方法,使用%;另一种采用format()方法,Python推荐使用第二种。
字符串类型格式化采用format()方法,基本使用格式是:
<模板字符串>.format(<逗号分隔的参数>)
<模板字符串>由一系列的槽组成,用来控制修改字符串中嵌入值出现的位置,其基本思想是将format()方法的<逗号分隔的参数>中的参数按照序号关系替换到<模板字符串>的槽中。
槽用大括号({})表示,如果大括号中没有序号,则按照出现顺序替换。如下图:
方法槽顺序.png)
如果大括号中指定了使用参数的序号,按照序号对应参数替换,如
下图所示。调用format()方法后会返回一个新的字符串,参数从0 开
始编号。
例如:
1 | #默认排序 |
format()方法可以非常方便地连接不同类型的变量或内容,如果需要输出大括号,采用{ {表示 { , } } 表示 } ,例如:
1 | "{}{}{}".format("圆周率",3.1415926,"...") |
format()方法中<模板字符串>的槽除了包括参数序号,还可以包括格式控制信息。此时,槽的内部样式如下:
- {<参数序号>: <格式控制标记>}
其中,<格式控制标记>用来控制参数显示时的格式,如下图:
<格式控制标记>包括:<填充><对齐><宽度>,<.精度><类型>6 个字段,这些字段都是可选的,可以组合使用,逐一介绍如下。
<填充>、<对齐>和<宽度>是3 个相关字段。<宽度>指当前槽的设定输出字符宽度,如果该槽对应的format()参数长度比<宽度>设定值大,则使用参数实际长度。如果该值的实际位数小于指定宽度,则位数将被默认以空格字符补充。<对齐>指参数在<宽度>内输出时的对齐方式,分别使用<、>和^三个符号表示左对齐、右对齐和居中对齐。<填充>指<宽度>内除了参数外的字符采用什么方式表示,默认采用空格,可以通过<填充>更换。例如:
1 | "Python" s = |
<格式控制标记>中逗号(,)用于显示数字的千位分隔符,例如:
1 | "{0:-^20,}".format(1234567890) #填充-,居中对齐,宽度为20,逗号分割千位分割符 |
<.精度>表示两个含义,由小数点(.)开头。对于浮点数,精度表示小数部分输出的有效位数。对于字符串,精度表示输出的最大长度。
1 | "{0:.2f}".format(12345.67890) |
<类型>表示输出整数和浮点数类型的格式规则。对于整数类型,输出格式包括6 种:
- b: 输出整数的二进制方式;
- c: 输出整数对应的 Unicode 字符;
- d: 输出整数的十进制方式;
- o: 输出整数的八进制方式;
- x: 输出整数的小写十六进制方式;
- X: 输出整数的大写十六进制方式;
1 | "{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(255) |
对于浮点数类型,输出格式包括4 种:
- e: 输出浮点数对应的小写字母 e 的指数形式;
- E: 输出浮点数对应的大写字母 E 的指数形式;
- f: 输出浮点数的标准浮点形式;
- %: 输出浮点数的百分形式。
浮点数输出时尽量使用<.精度>表示小数部分的宽度,有助于更好
控制输出格式。
1 | "{0:e},{0:E},{0:f},{0:%}".format(3.14) |
元组类型:
元组的概念
- 元组是包含多个元素的类型,元素之间用逗号分割。例如:t1 = 123,456, “hello”
- 元组可以是空的,t2=()
- 元组包含一个元素时:t3=123,
- 元组外侧可以使用括号,也可以不使用
元组的特点:
- 元组中元素可以是不同类型;一个元组也可以作为另一个元组的元素,此时,作为元素的元组需要增加括号,从而避免歧义。
- 元组中各元素存在先后关系,可以通过索引访问元组中元素。例如:t3[0].
- 元组定义后不能更改,也不能删除。例如:t3[0]=456
- 与字符串类型类似,可以通过索引区间来访问元组中部分元素。例如:t[1:]
与字符串一样,元组之间可以使用+号和*号进行运算。 - 例如:
1 | 123,456,("hello", "中国") t3 = |
元组总结
- Python语言中的元组类型定义后不能修改
- 因为tuple(元组)不可变,所以代码更安全。
- 如果仅考虑代码的灵活性,也可以用列表类型代替元组类型。
列表类型:
列表的概念
- 列表(list)是有序的元素集合;
- 列表元素可以通过索引访问单个元素;
列表与元组类似
- 列表中每个元素类型可以不一样
- 访问列表中元素时采用索引形式
列表与元组不同
- 列表大小没有限制,可以随时修改
列表的操作:
针对列表有一些基本操作,这些操作与字符串操作类似。
列表操作符 | 含义 |
---|---|
< list1 > + < list2> | 连接两个列表 |
< list > * < 整数类型> | 对列表进行整数次重复 |
< list > [< 整数类型>] | 索引列表中的元素 |
len( < seq > ) | 列表中元素个数 |
< list >[ < 整数类型> : < 整数类型>] | 取列表的一个子序列 |
for < var > in < list > : | 对列表进行循环列举 |
< expr > in < list > | 成员检查,判断是否 |
列表操作示例:
1 | 1,2,3,4,5] list1 = [ |
列表相关方法:
方法 | 含义 |
---|---|
< list > . append ( x ) | 将元素x增加到列表的最后 |
< list > . sort ( ) | 将列表元素排序 |
< list > . reverse ( ) | 将序列元素反转 |
< list > . index ( ) | 返回第一次出现元素x的索引值 |
< list > . insert ( i, x ) | 在位置i处插入新元素x |
< list > . count ( x ) | 返回元素x在列表中的数量 |
< list > . remove ( x ) | 删除列表中第一次出现的元素x |
< list > . pop ( i ) | 取出列表中位置i的元素,并删除它 |
示例:
1 | list3 |
对于字符串,可以通过split()函数,将字符串拆分成一个列表,默认以空格分割。
例如:
1 | "hello word hello python 1 123".split() |
文件类型:
打开文件:
- 建立磁盘上的文件与程序中的对象相关联。
- 通过相关的文件对象获得。
文件操作:读取、写入、定位、追加、计算等。
关闭文件:
- 切断文件与程序的联系
- 写入磁盘,并释放文件缓冲区
打开文件:Open()
格式:
1 | Open() |
打开模式:
符号 | 含义 |
---|---|
r | 只读。如果文件不存在,则输出错误 |
w | 只写。如果文件不存在,则自动创建文件 |
a | 附加文件到末尾 |
rb | 只读二进制文件。如果文件不存在,则输出错误 |
wb | 只写二进制文件。如果文件不存在,则自动创建文件 |
ab | 附加文件到二进制文件末尾 |
r+ | 读写 |
例如:
1 | #打开一个名为“number.dat”的文本文件。 |
文件读取:
- read()返回值为包含整个文件内容的一个字符串。
- readline()返回值为文件下一行内容的字符串。
- readlines()返回值为整个文件内容的列表,每项是以换行符为结尾的一行字符串。
例如:
1 | #将文件内容输出到屏幕上 |
写入文件:
- 从计算机内存向文件写入数据。
- write():把含有文本数据或二进制数据块的字符串写入文件中。
- writelines():针对列表操作,接收一个字符串列表作为参数,将它们写入文件。
例如:
1 | >>>outfile = open("outfile.txt", "w") |
文件遍历
常用为:拷贝文件,根据数据文件定义行走路径,将文件由一种编码转换位另外一种编码。
通用代码框架:
1 | file = open(someFlie, "r") |
简化代码框架:
1 | file = open(someFlie, "r") |
例如:文件拷贝:
1 | def main(): |
字典类型:
字典是针对非序列集合而提供的一种数据类型。
字典的概念:
- 映射:通过任意键值查找集合中值信息的过程。
- pthony中通过字典实现映射。
- 字典是键值对的集合:该集合以键为索引。同一个键信息对应一个键。
字典类型与序列类型的区别:
- 存取和访问方式不同。
- 键的类型不同:序列类型只能用熟悉类型的键。 字典类型可以用其他对象类型的键。
- 排序方式不同:序列元素保持了元素的相对关系。 而字典中的数据都是无序排列的。
- 映射方式不同:序列类型通过地址映射到值。 而字典类型通过键直接映射到值。
字典的操作:
创建字典:
字典由键和对应的值成对组成。字典也被称为关联数组或哈希表。基本语法如如下:
1 | dictionaryName[key] = value |
注意:
- 每个键与值用冒号隔开(:),每对用逗号分开,整体放在花括号中{}.
- 键必须独一无二,但值不必。
- 值可以取任何的数据类型,但必须是不可变的,如字符串,数或元组。
访问字典里的值:
dictionaryNmae[key] 返回键key对应的值value。
1 | students |
添加数据:
dictionaryNmae[key] = value 来向字典里添加数据。
1 | "003"] = "小张" students[ |
删除字典数据:
- del dictionaryNmae[key] 可以删除其中一组数据。
- del dictionaryNmae 可以删除整个字典。
- dictionaryNmae.clear() 可以清空字典内容。
1 | del students["002"] #删除编号为“002”的元素 |
字典的遍历:
- 遍历字典的键key: for key in dictionaryName.keys(): print(key)
- 遍历字典的值value: for value in dictionaryName.values(): print(value)
- 遍历字典的项 : for item in dicitonaryName.items(): print(item)
- 遍历字典的key-value: for item,value in adict.items(): print(item, value)
1 | "001":"小明", "002":"大明" , "003":"小张"} #创建字典 students = { |
判断一个键是否在在字典中:
in 或者 not in。
1 | >>>students |
字典常用的方法:
方法名 | 含义 |
---|---|
cmp(dict1,dict2) | 比较两个字典元素 |
len(dict) | 计算字典元素的个数,即键的总数 |
str(dict) | 输出字典可打印的字符串提示 |
type(variable) | 返回输入类型的变量 |
dict.clear() | 清空字典元素 |
dict.copy() | 返回一个字典的 浅复制。 |
dict.fromkeys() | 创建一个新的字典, 以序列seq中元素做字典的键,val为字典所有键对应的初始值 |
dict.get(key, default = None) | 返回指定键的值,如果值不在字典中返回default值 |
in 或 not in | 判断某键是否在字典中 |
dict.items() | 以列表返回可遍历的(键, 值) 元组数组 |
dict.update(dict1) | 把字典dict1的键/值对更新到dict里 |
dict.pop(key) | 删除并返回字典中的key对应的值 |
示例:
1 | #原字典列表 students |