(1).数字类型
1)整数类型(int)
Python中的整数类型与数学中的整数概念一致,它可正可负没有取值范围限制(只是理论上的无限,实际上机器内存有限,不可能无限大)。
注意:在python2中整数型是有大小限制的,在32位机器上,整数的二进制位数为32,取值范围为-2^31~2^31-1,即-2147483648~2147483647;在64位机器上,整数的二进制位数为64,取值范围为-2^63~2^63-1,即-9223372036854775808~9223372036854775807。超过这个范围的整数类型就是long型。
整数类型的四种表现方式:
二进制:以0b或0B开头,例如0b010,-0B101
八进制:以0o或0O开头,例如0o123,-0O456
十进制:不做说明和演示
十六进制:以0x或0X开头,例如0x9a,-0X89
2)浮点数类型
Python中的浮点数与数学中的实数概念一致,它指的是带有小数点以及小数的数字。与整数不同,浮点数的取值范围和小数精度都存在限制,但常规计算时可以忽略。
浮点数取值范围从数量级上讲大约是-10^308~10^308,精度数量级约为10^-16,也就是说两个小数之间的差别最小可以表示到10^-16这个数量级。
但是浮点数有一个特性需要特别注意:浮点数间运存存在不确定尾数,这不是BUG。这里举一个例子0.1+0.2应该得出的是0.3,但是Python计算出来的却不是0.3,如下:
>>> 0.1+0.2 0.30000000000000004 >>> 0.1+0.3 0.4
其实这个不确定尾数并不止Python中存在,许多编程语言中都存在,它涉及到了计算机对数字运算的内部实现原理。
Python使用的IEEE 754标准(52M/11E/1S),该标准采用8字节的64位二进制存储空间,分配了52位来存储浮点数的有效数字,11位存储指数,1位存储正负号(也是Python常说的53位二进制表示小数部分,52+1,2^53-2=9007199254740990,约为10^16),即这是一种二进制版的科学计数法格式。
还需要了解十进制小数与二进制小数之间互相转换问题,首先来看一下十进制小数转换为二进制小数:
原十进制小数为0.1 0.1*2=0.2——取整数部分填充当前二进制小数位——0——剩余非零部分用于继续运算——0.2 0.2*2=0.4——取整数部分填充当前二进制小数位——0——剩余非零部分用于继续运算——0.4 0.4*2=0.8——取整数部分填充当前二进制小数位——0——剩余非零部分用于继续运算——0.8 0.8*2=1.6——取整数部分填充当前二进制小数位——1——剩余非零部分用于继续运算——0.6 0.6*2=1.2——取整数部分填充当前二进制小数位——1——剩余非零部分用于继续运算——0.2 ......之后进入无限循环
但是到了Python中并不能无限循环,从第53位开始进行舍入,舍入规则为0舍1入,那么0.1转换为二进制小数实际为0.00011001100110011001100110011001100110011001100110011010。注意:4个二进制为一个整体。
二进制小数转换为十进制小数:
原二进制小数为0.00011001100110011001100110011001100110011001100110011010 0*2^-1+ 0*2^-2+ 0*2^-3+ 1*2^-4+ 1*2^-5+ 0*2^-6+ ...... 1*2^-53+ 0*2^-54+ 1*2^-55+ 0*2^-56= 0.10000000000000000055511151231257827021181583404541015625
可以看到经过两次转行后出现了非常长的尾数,只是在浮点数输出时只输出了前16位小数。所以我们可以得出一个结论,二进制表示小数,可以无限接近,但不完全相同。这也是不确定尾数产生的原因,在运算时会先将十进制转换为二进制,再进行运算,运算完成后再由二进制转换为十进制。
随之也带来了另一个问题,运算后的数值比较。由于不确定尾数的存在,不能直接进行比较,必须使用round(x,d)函数,对数值x进行四舍五入,d为小数精确位数。
>>> 0.1+0.2==0.3 False >>> round(0.1+0.2,1)==0.3 True
Python浮点数可以使用字母e或E作为幂的符号,以10为基数的科学计数法,格式为<a>e<b>,表示a*10^b。例如96000,采用科学计数法就是9.6e4;0.0043,采用科学计数法就是4.3E-3。
3)复数类型
在众多的编程语言中,只有Python提供了复数类型,复数类型与数学中的复数概念一致。定义j2=-1,即j=√(-1),以此为基础构建的数学体系。a+bj被成称为复数,其中a为实部,bj整个是虚数部分,b为虚部。例如:z=1.23e-4+5.6e+89j,那么z就是一个复数类型,可以使用z.real获取实部1.23e-4,z.imag获取虚部5.6e+89。
客观的来说,在常规的计算机编程中复数类型很少被使用,但它却是进行空间变换,尤其是跟复变函数相关的科学体系中最常用的一种类型。
4)数值运算操作符
操作符及使用 | 描述 |
x + y | 加,x与y之和 |
x - y | 减,x与y之差 |
x * y | 乘,x与y之积 |
x / y | 除,x与y之商,10/3=3.3333333333333335 |
x // y | 整数除,x与y之整数商,10//3=3 |
+ x | x本身 |
- y | y的负值 |
x % y | 余数,模运算,10%3=1 |
x ** y |
幂运算,x的y次幂,x^y。当y为小数时,那么就是开根, 4**0.5=√4=2,8**(1/3)=2 |
二元操作符有对应的增强赋值操作符
增强操作符以及使用 | 描述 |
x op= y |
即x = x op y,其中op为二元操作符。 x+=y x-=y x/=y x*=y x//=y x%=y x**=y >>> x=3.14 |
注意:不同的数字类型可以进行混合运算,最终结果以最宽的类型为准。整数-->浮点数-->复数。
5)数值运算函数
以下介绍的都是Python的内置函数,更多数值运算函数需要使用math库
函数 | 返回值(描述) |
abs(x) | 返回x的绝对值,例如abs(-10.01)结果为10.01 |
divmod(x,y) | 换回一个整数商x//y和余数x%y的元组,例如divmod(10,3)结果为(3,1) |
pow(x,y[,z]) |
幂余,(x**y)%z,z可以省略只求幂。例如pow(3,pow(3,99),10000),结果为4587,显示幂运算的最后四位 |
round(x[,d]) | 返回浮点数x的四舍五入值,d是保留小数位数,默认为0,例如round(-10.123,2),结果为-10.12 |
max(x1,x2,...,xN) | 最大值,返回给定参数的最大值,参数可以为序列 |
min(x1,x2,...,xN) | 最小值,返回给定参数的最小值,参数可以为序列 |
6)数字类型转换函数
函数 | 描述 |
int(x) | 将x变为整数,舍弃小数部分。例如int(1.23)结果为1,int("123")结果为123 |
float(x) | 将x变为浮点数,增加小数部分。例如float(12)结果为12.0,float("1.23")结果为1.23 |
complex(real [,imag]) | 创建一个复数 |
(2).字符串类型
字符串提供了两类四种表示方法:
1、由一对单引号或双引号表示,仅表示单行字符串
2、由一对三单引号或三双引号表示,可以表示多行字符串
举例如下:
"请输入带有符号的温度值:" ‘C‘ ‘‘‘Python 语言‘‘‘ """全输出结果为 72C"""
说到一对三引号,很容易和Python的多行注释联系在一起。实际上,Python并没有真正提供多行注释的表达方式,三单引号构成的就是字符串,只是没有赋给任意变量,那么它就可以当做注释使用。
之所以Python通过了两类四种表达方式,是为了更好处理字符串中的单引号和双引号,如果同时存在单引号和双引号可以使用一对三单引号或三双引号。
1)字符串的序号
一段字符串可以由左往右进行编号,实现正向递增序号,从0开始向上增长;也可以从结尾处想头部方向索引,那么构成的就是反向递减序号,从-1开始递减
字符串中最重要的两个操作:索引和切片,它们就使用到了字符串的序号。索引和切片使用[]来获取字符串中单个字符或一段字符。
索引:返回字符串中单个字符,格式:<字符串|变量名>[N],实例:
>>> "请输入带有符号的温度值:"[1] ‘输‘ >>> Str="请输入带有符号的温度值:" >>> Str[-2] ‘值‘
切片:返回字符串中的一段字符串,格式<字符串|变量名>[M:N],M省略表示从头开始,N省略表示直到末尾,实例:
>>> "请输入带有符号的温度值:"[1:2] ‘输‘ >>> Str="请输入带有符号的温度值:" >>> Str[:-2] ‘请输入带有符号的温度‘ >>> Str[-4:] ‘温度值:‘
注意:切片是从M到N-1的字符串,并不包含N。
下面介绍切片的高级用法,切片使用<字符串|变量名>[M:N:K],根据步长K对字符串进行切片。实例:
>>> "零一二三四五六七八九"[1:8:2] ‘一三五七‘
切片还有一种特殊用法,倒序,即K=-1时。实例:
>>> "零一二三四五六七八九"[::-1] ‘九八七六五四三二一零‘
2)转义字符
转义字符表达特定字符的本意
转义字符 | 描述 |
\ | 单个反斜杠在一行末尾时,表示续行符 |
\\ | 反斜杠 |
\‘ | 单引号 |
\" | 双引号 |
\a | 响铃 |
\b | 退格(BackSpace) |
\000 | 空 |
\n | 换行,光标移动到下行行首 |
\v | 纵向制表符 |
\t | 横向制表符 |
\r | 回车,光标移动到本行行首 |
\f | 换页 |
\oyy | 八进制数,例如:\o12代表换行 |
\xyy | 十六进制数,例如:\x0a代表换行 |
\other | 其他的字符都以普通格式输出 |
3)字符串操作符
操作符及使用 | 描述 |
x + y | 连接两个字符串x和y,例如"hello" + "world"结果为"helloworld" |
n * x或x * n | 复制n次字符串x,n为正整数,例如2 * "hello"结果为"hellohello" |
x in s |
in是Python保留关键字,这里当做操作符使用。如果字符串s中包含字符串x,那么返回True,否则返回False。 例如:"llo" in "helloworld",返回True |
x not in s | 与in的用法相反 |
4)字符串处理函数
Python中提供了一些以函数形式来实现的字符串处理功能,称之为字符串处理函数。Python提供了6个有用的内置函数,如下:
函数及使用 | 描述 |
len(x) |
返回字符串x的长度,例如:len("一二三456")结果为6。 注意:在Python中,无论是数字、标点符号、英文字母或汉字都是一个字符,长度是相同的 |
str(x) | 将任意类型的x转换为对应的字符串形式,例如:str(1.23)结果为"1.23",str([1,2])结果为"[1,2]" |
hex(x)或oct(x) | 将整数x转换为小写十六进制或八进制的字符串,例如:hex(425)结果为"0x1a9",oct(425)结果为"0o651" |
chr(u) | u位Unicode编码,返回其对应的单字符 |
ord(x) | x为单字符,返回其对应的Unicode编码 |
5)字符串处理方法
这里的“方法”特指<a>.<b>()风格中的函数<b>(),或者说“方法”本身也是函数,但与<a>有关,它是<a>能够提供的函数,而且方法必须采用<a>.<b>()的形式使用。
字符串与变量也是一种<a>,存在一些操作方法。客观讲方法是面向对象语言的专有名词,<a>是对象,<b>()是方法。
这里介绍常用的8个字符串处理方法:
方法及使用 | 描述 |
str.lower()或str.upper() |
使用这两个函数可以将字符串中的所有字符全小写或大写, 例如:"AaBbCcDd".lower()结果为"aabbccdd" "AaBbCcdD".upper()结果为"AABBCCDD" |
str.split(sep=None) |
返回一个列表,这个列表由字符串str根据字符串sep被分割的部分组成, 例如:"A,B,C".split(",")结果为[‘A‘,‘B‘,‘C‘] |
str.count(sub) |
返回子字符串sub在字符串str中出现的次数,例如: "an apple a day".count("a")结果为4 |
str.replace(old,new[,max]) |
将字符串str中old子串替换为new子串,如果存在整数max,表示替换次数上限, 例如:"python".replace("n",‘n123‘)结果为"python123" |
str.center(width[,fillchar]) |
返回width宽度str居中的字符串,如果存在fillchar,那么空余部分使用fillchar填充, 例如:"python".centor(10)结果为" python ", "python".center(10,"=")结果为"==python==" |
str.strip(chars) |
对照字符串chars中列出的字符,将字符串str左侧和右侧存在的相同字符去除,例如: "helloworld".strip("helod")结果为"wor"。strip()也可以认为是同时执行了lstrip()和rstrip() |
str.join(iter) |
以指定字符串iter作为分隔符,将str所有字符分隔,重新组成一个新的字符串,例如: "python".join(",")结果为"p,y,t,h,o,n" |
6)字符串类型的格式化
格式化是对字符串进行格式表达的方式。字符串格式化使用.format()方法,输出样式如下:<模板字符串>.format(<参数1>,<参数2>,...,<参数n>)。在具体的使用中需要用到一个新的概念:槽,槽相当于一个信息占位符,它是使用一对{}来表示,它只在字符串中有用。
实例1:
字符串中槽{}的默认顺序 format()中参数的顺序 --------------------------------> ------------------> 0 1 2 0 1 2 ^ ^ ^ ^ ^ ^ | | | | | | | | | | | | >>> "{ }:计算机{ }的CPU占用率为{ }%".format("2020-03-13","A",10) ‘2020-03-13:计算机A的CPU占用率为10%‘
在实例1中,设置了三个槽,它与其他待输出的字符信息共同组成了字符串,每一个槽中所要添加的内容与.format()中对应的参数是一致的。
在不指定槽的序列的情况下,模板字符串的槽的序列从0开始,依次增加,与format中的参数序列一一对应,填充到槽中。进一步来说,我们可以在槽中,指定需要添加的参数位置。
我们将实例1进行变化,形成一个新的实例,实例2:
_________________________________________________
| ________________________________ |
| | | |
>>> "{1}:计算机{0}的CPU占用率为{2}%".format("2020-03-13","A",10)
| |
———————————————————————————— ‘A:计算机2020-03-13的CPU占用率为10%‘
在槽中填写format对应的参数序列,让槽去调取format中对应的参数,完成字符串的格式化。
还需要关注槽内部使用格式化的控制标记,来进行格式控制(参数的格式化),槽内部对格式化的配置方式,如下:{<参数序列>:格式控制标记}。简单来讲,在槽的内部,除了槽的参数序列之外,通过一个引号来引导一些参数,控制某一个变量在槽位置的输出格式,Python一共提供了六种格式控制标记,分别是<填充>、<对齐>、<宽度>、<,>、<.精度>和<类型>。六种格式控制标记可以分为两组,前三个一组,后三个一组。
<填充>、<对齐>和<宽度>,这一组概念的基本模式是:首先给出一个输出<宽度>,然后决定即将输出的这个参数在这个宽度中的<对齐>方式,最后如果还有空余的空间用什么字符<填充>(如果没有<填充>,那么采用空格补齐的方式),这三项就决定了一个基本的格式。举个例子,<填充>-->"=",<对齐>-->“^”,<宽度>-->“20”:
>>> "{0:=^20}".format("PYTHON") ‘=======PYTHON=======‘
<.>、<.精度>和<类型>都与具体的数字有关,第一个<,>比较特殊,它指的是数字的千位分隔符;第二个<.精度>需要注意,在精度前有一个小数点,它表示的是浮点数小数的精度,或者表示字符串最大的输出长度;第三个<类型>,表示以什么类型将变量放到槽中。举个例子:
>>> "{0:,.2f}".format(12345.6789) ‘12,345.68‘ >>> "{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(425) ‘110101001,?,425,651,1a9,1A9‘ >>> "{0:e},{0:E},{0:f},{0:%}".format(3.14) ‘3.140000e+00,3.140000E+00,3.140000,314.000000%‘
(3).布尔类型
布尔类型是一个非常特殊的类型,所有标准对象均可用于布尔测试,同类型的对象之间可以比较大小。每个对象天生具有布尔True或False值。空对象,值为零的任何数字或者Null对象None的布尔值都是False。在Python3中True=1,False=0,可以和数字型进行运算。
下列对象的布尔值是False:None;False;0(整型),0.0(浮点型);0L(长整形);0.0+0.0j(复数);“”(空字符串);[](空列表);()(空元组);{}(空字典)。
值不是上列的任何值的对象的布尔值都是True,例如non-empty,non-zero等。用户创建的类实例如果是定义了nonzero(_nonzeor_())或length(_len_())且值为0,那么它们的布尔值就是False。
(4).列表
列表(List)是Python中使用最频繁的数据类型,是Python六个序列中最常用的序列之一(另一个是元组),格式为[value1,value2,...,valuen]。列表中的数据项不需要具有相同的类型,支持数字、字符串甚至列表。
1)列表的序号
列表的序号与字符串的序号类似,由左向右进行编号,实现真向递增序号,从0开始增长;由右向左进行编号,实现反向递减序号,从-1开始递减。
同样实现了两个重要操作:索引和切片,使用[]来获取列表中的单个或多个有效值。
索引:返回列表中的单个有效值,格式<列表|变量名>[N],实例:
>>> ["1",2,"3"][1] 2 >>> list1=["1",2,"3"] >>> list1[-1] ‘3‘
切片:返回列表中的多个有效值,格式<列表|变量名>[N],实例:
>>> ["1",2,"3"][:1] [‘1‘] >>> list1=["1",2,"3"] >>> list1[-2:] [2, ‘3‘]
童谣也存在步长的用法<列表|变量名>[M:N:K]
>>> [0,1,2,3,4,5,6,7,8,9][::-1] [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] >>> [0,1,2,3,4,5,6,7,8,9][1:8:2] [1, 3, 5, 7]
2)列表的操作符
操作符及使用 | 描述 |
list1 + list2 |
将两个列表list1和list2组合成一个新的列表,例如: [1]+[‘2‘]结果为[1, ‘2‘] |
n * list或list * n |
复制n次列表,n为正整数,例如: 3 * [1,‘2‘]结果为[1, ‘2‘, 1, ‘2‘, 1, ‘2‘] |
x in list |
如果列表list中包含元素x,那么返回True,否则返回False,例如: [1,‘2‘] in [1,‘2‘,3]结果为False,‘2‘ in [1,‘2‘,3]结果为True |
x not in list | 与in的用法相反 |
3)列表处理函数
函数及使用 | 描述 |
len(list) | 返回列表元素个数,例如:len([1,2,3,4])结果为4 |
max(list) |
返回列表元素中最大值,列表元素需要统一,例如: max([11,2,5,32])结果为32 |
min(list) |
返回列表元素中最小值,列表元素需要统一,例如: min([‘a‘,‘s‘,‘A‘,‘S‘])结果为‘A‘ |
list(seq) | 将元组转换为列表,例如:list((1,2,3,4))结果为[1, 2, 3, 4] |
4)列表处理方法
方法及使用 | 描述 |
list.append(obj) | 在列表末尾添加新的对象 |
list.count(obj) | 统计某个元素在列表中出现的次数 |
list.extend(seq) | 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) |
list.index(obj) | 从列表中找出某个值第一个匹配项的索引位置 |
list.insert(index,obj) | 将对象插入列表 |
list.pop(index=-1) | 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 |
list.remove(obj) | 移除列表中某个值的第一个匹配项 |
list.reverse() | 反向列表中元素 |
list.sort( key=None, reverse=False) | 对原列表进行排序 |
list.clear() | 清空列表 |
list.copy() | 复制列表 |
(5).元组
元组与列表类似,只是采用的小括号包裹元素,并且元素不可修改,格式为(value1,value2,...,valueN)。(列表是中括号包裹元素,元素可以进行更改)
元组没有提供方法,其他的包括序号、操作符以及函数与列表完全一致,只有类型转换函数不同。类型转换函数师tuple(iterable),将可迭代系列(序列,包含列表)转换为元组。
>>> tuple([1,2,3,‘4‘]) (1, 2, 3, ‘4‘)
(6).字典
字典是一种可变容器模型,可以存储任意类型对象,采用键值对模式,与.json文件格式类似,格式{key1:value1,key2:value2,...,keyn:valuen}。
在字典中,键是必须的,而且不可更改;值不是必须的,而且可以更改。
有需要可以看:https://www.runoob.com/python3/python3-dictionary.html
(7).集合
集合是一个无序的不重复元素序列,使用{}或set()函数创建。注意:创建空集合必须采用set(),因为{ }是用来创建空字典的。
有需要可以看:https://www.runoob.com/python3/python3-set.html
(8).扩展:删除变量
使用del [变量名]可以删除变量,最好不要出现与函数相同的变量名,否则容易报错。
>>> list={1,2,3,4} >>> list((1,2,3)) #此时就会报错 Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> list((1,2,3)) TypeError: ‘set‘ object is not callable >>> del list #删除这个变量 >>> list((1,2,3)) #删除之后又可以使用了 [1, 2, 3]
参考:https://www.cnblogs.com/aiwanbuhui/p/7766352.html
https://www.runoob.com/python3/python3-data-type.html
https://www.cnblogs.com/hdk1993/p/8893954.html
原文:https://www.cnblogs.com/diantong/p/12463040.html