Python基础 day02---基础数据类型

基础数据类型

Python3.X中基础数据类型共分为4种:

  • 整型(int)
  • 浮点型(float)
  • 布尔型(bool)
  • 字符串 (str)

整型:int

整形数就是不包括小数部分的数值,分为整数、0和负数,Python提供了int用于表示现实中的整数。

Python为int类型提供了数学运算及运算符。

x = 4 + 7 * 2
print(x)
18

y = 19 + 99 / 33
print(y)
22.0

z = 108 - 39 + 2
print(z)
71

print(type(x))
<class 'int'>
print(type(y))
<class 'float'>
print(type(z))
<class 'int'>

由以上实列看出,运算规则与数学运算规则基本一致,只是在处理除法("/")时,返回的时float类型数据,在现实中有很多的复杂运算,也已添加括号、次幂、根等算法实现。

x = ((4+7) * 3 / (1 + 9)) + 9 ** 2
print(x)
84.3

int类型,可以与赋值运算相结合,还能够变化格式,其结果一样:

x = 4
x += 1
x
5

x -= 1
x
4

x *=1
x
5

x /= 1
x
5

x /= 2
x
2.5

赋值运算符,我们知道在通常一个数不可能"等于" 该数加一,但在编程语言中是一个合法的语句,它的涵义时将变量x指向的值加1之后再重新赋值给x本身,鉴于这种操作的频繁,Python包括其他语言提供这种 +=的简写形式。

x += 1
等价于 x = x + 1

浮点型:float

浮点型通常来说就是小数,float类型的数值与数学中的写法基本一致,允许小数点后没有任何数字(小数部分为0),如下列数值都是浮点类型。

3.1415926535898    -6.5    19.0    -5.0    0.5

Python同样也为浮点型数值提供了加减乘除等运算,运算符也跟整数类型一样,但是在Python3.X中,运算除法("/")时,是保留小数部分的,而Python2.X版本解释器则返回int(整数)类型。

x = 6 / 3
x
2.0
type(x)        # Python3.X中
<class 'float'> 

type(x)        # Python2.X中
<class 'int'>

浮点型数据能够表示巨大的数值,能够进行高精度的计算,但由于浮点型数据在计算机内部是固定长度的二进制表示的,有些数值可能无法精确的表示,只能存储带有微小误差的近似值,栗子:

>>> 1.2 - 1.0   			# 示例1  
0.19999999999999996  
>>> 2.2 - 1.2   			# 示例2  
1.0000000000000002  
>>> 2.0 - 1.0   			# 示例3  
1.0 

这个栗子可以看到,示例1的结果比0.2略小,而示例2比1.0略大,而示例3则算出了精确的结果,一般而言,这种微笑的误差不影响实际应用,但在一些精密计算的情况下,因为极小的误差,仍能导致出错。

1.2 - 1.0 == 0.2
False
2.0 - 1.0 == 1.0
True

上面的栗子,我们用运算符== 来比较表达式的真假,结果显示为布尔值的True和False,从上面的栗子中我们得出一个重要的经验;不要再浮点数中使用==来判断是否相等,而是通过计算两个浮点数的差值是否足够小,是的话,我们认为相等。

epsilon = 0.0000000000001   # 足够小的数
abs((2.2 - 1.2) - 1) <= epsilon  
True  
abs((1.2 - 1.0) - 0.2) <= epsilon  
True

注:abs()函数返回一个数值的绝对值。

abs(-9)
9
abs(5.0)
5.0

Python用浮点型数值表示很大或很小的数值时,会自动采用科学计数法来表示。

1234.9999 ** 10
8.254090462291893e+30

1234.9999 ** -10
1.2115205237553605e-31

注意,从运算效率来说,float相对于int运算效率略低。所以,如果不是必须用到小数,一般应该采用整数类型。另外,不要用浮点数来通过运算符==来判断是否相等这样的问题。

那么在Python中,我们可以用 == 和 is 做判断,那么二者是否是一个意思呢?举栗子:

a = 255
b = 1000
c = 255
d = 1000
a == c
True
a is c
True

b == d
True
>>> b is d
False

在解释之前,我们需要补充一点知识,Python为了实现对内存的有效利用,在对小整数-5~256之内的整数会进行缓存,不在此范围内的则不缓存。那么,我们再来说上面的例子,通过各变量在内存中的id看到,a和b都指向同一个内存空间,所以,无论是is还是==都是True,那么我们再来看c和d,在内存中的id地址是不同的,但是两者的值是相同的,那么可以得出,==比较的是值,而is则是比较的是两个变量在内存中的id地址。

布尔类型:bool

在上一节,浮点型数据的示例中,判断两个数是否相等时,Python给我们返回了布尔类型的结果,那么什么是布尔类型呢?

python 中布尔值使用常量True 和 False来表示;注意大小写

比较运算符< > == 等返回的类型就是bool类型;布尔类型通常在 if 和 while 语句中应用

这边需要注意的是,python中,bool是int的子类(继承int),故 True==1  False==0 是会返回Ture的,有点坑,如要切实判断用 xxx is True,Python2.3 版本之前,Python用1和0来表示真、假,这个方法沿用至今。

if 1:
    print("true")
else:
    print("false")

true

用布尔表达式最常用的是判断两个表达式的数值大小关系。栗子:

[表达式] [运算符] [表达式]  
>>> 9 == 9  
True 

但在判断字符串的时候,布尔表达式就不是那么简单了,栗子:

'hold' == 'hold'
True
'hold' == 'HOLD'
False

在Python中,字符串是按字典的顺序进行比较的,也就是说是基于字母顺序比较,而字母顺序是按照ASCII编码顺序排列的。所以,不管是大小写字母,标点符号,阿拉伯数字以及各种字符也是要按照ASCII编码来确定大小。

字符串:str

什么是序列?

指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们。

为了更形象的认识序列,可以将它看做是一家旅店,那么店中的每个房间就如同序列存储数据的一个个内存空间,每个房间所特有的房间号就相当于索引值。也就是说,通过房间号(索引)我们可以找到这家旅店(序列)中的每个房间(内存空间)。

在 Python 中,序列类型包括字符串、列表、元组、集合和字典,这些序列支持通过索引取值、切片、相加、相乘等通用通用的操作。但比较特殊的是,集合和字典不支持索引、切片、相加和相乘操作。
字符串也是一种常见的序列,它也可以直接通过索引访问字符串内的字符。

Python为序列中的每个元素分配一个序号,即元素的位置,也叫做索引,序列中的第一个元素索引为0,第二个索引为1,依此类推。
注意:Python中序列编号机制是从0开始的,其他大部分的语言都是如此设计。另外,这里的序列如无特指,一律为有序序列。

字符串可以说是Python中最受欢迎的数据类型了。字符串在表示方面也更为灵活多变。

字符串的创建

Python语言用引号来创建(界定)字符串。一般的通过引号(单引号,双引号),三引号(单、双三引号)都可以标识字符串,英文用str函数表示。

s1 = '我是单引号表示的字符串'
s2 = "我是双引号表示的字符串"
s3 = '''我是3个单引号表示的字符串'''
s4 = """我是3个双引号表示的字符串"""
print(s1, type(s1))  # 我是单引号表示的字符串 <class 'str'>
print(s2, type(s2))  # 我是双引号表示的字符串 <class 'str'>
print(s3, type(s3))  # 我是3个单引号表示的字符串 <class 'str'>
print(s4, type(s4))  # 我是3个双引号表示的字符串 <class 'str'>

通常,我们使用引号(单、双都行)来创建字符串。也是程序中最常用的形式,三引号(单、双都行)允许字符跨越多行,并在输出时保持原来的格式,字符串中可以包含换行符、制表符、及其他特殊字符。主要用于一些特殊格式,如文档型的字符串,也用来对代码进行注释。但需要注意的是,只要不是三引号,就只能在一行内表示(你肯定会说那我加个换行符不就行了么!好吧,你成功的骗了自己,但Python解释器显然不这么认为)。
转义字符反斜杠
一般的,Python中用单引号还是双引号并没有区别,但有些情况单双引号的结合使用更方便,比如我们会碰到如下的情况。

'I'm Ning' 

Python解释器在读取字符串的时候,碰到第二个单引号就已经解释成字符串了,但又无法解释后面的字符串导致报错,你可能会想到,用双引号来创建字符串。

"I'm Ning" 

OK,问题解决!

但是碰到下面这样的情况呢?

'"I'm Ning" he said' 

这时候就要用字符串之转义字符反斜杠。

s5 = '"I\'m Ning",he said'
print(s5)  
"I'm Ning",he said

因为上面的单引号被当做界定符,所以字符串内部的单引号要用字符\来转变意义为普通字符,才能被解释器正常解释执行。下面的\\一样,被当成普通的字符了。

s6 = "\"I'am Ning\", he said"
print(s6)  
"I'am Ning", he said

原生(始)字符串

有时候,我们会打印一些特殊的字符串,而不希望反斜杠被当成特殊字符如打印一个路径。

print('C:\\software')  # C:\software

结果已经不是我们想要的样子了,这是,你可能说加反斜杠,没错,是这样的。

print ('C:\\\\software')  
C:\\software

在实际情况中,很少有这样短的路径,都是类似于这样的,需要加很多反斜杠做转义。

print("C:\\\\Users\\\\Anthony\\\\AppData\\\\Roaming\\\\Microsoft\\\\Windows\\\\Start Menu\\\\Programs")

这里还有一种方法,使用原生字符串(或称原始字符串)来解决这个问题,在字符串前加一个r,原生字符串不会将反斜杠视为特殊字符,原生字符串中的每个字符都会原封不动的输出。

print(r'C:\\nowhere')
C:\\nowhere
print(r'C:\\Users\\Anthony\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs')  
C:\\Users\\Anthony\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值