Python入门---数据类型

python数据类型包括:整数(Int)、浮点数(Float)、字符串(String)、布尔类型(Boolean)、空值(None)、列表(List)、元组(Tuple)、集合(Set)、字典(Dict)。

本文主要介绍几种基础数据类型:整数(Int)、浮点数(Float)、字符串(String)、布尔类型(Boolean)、空值(None)

1、整数(Int)

Python可以处理任意大小的整数,包括负整数。在python程序中整数的表示方法和数学上的写法一样,例如:1,-9,234,0 

Python同时支持二进制、八进制以及十六进制的表示方法,例如:

二进制:

>>> 0b1111
15

八进制:

#python2
>>> 01111
585
>>> 0o1111
585
 

#python3
>>> 01111
  File "<stdin>", line 1
    01111
        ^
SyntaxError: invalid token
>>> 0o1111
585

十六进制:

>>> 0x1111
4369

其中对于八进制的表示,Python2支持'0'为前缀,而Python3不支持。

注意:在python中,注释以“#”开头,后面的文字直到行尾都算注释

# 这一行全部都是注释...
print 'hello' # 这也是注释

2、浮点数(Float)

整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的,除法也是精确的,而浮点数运算则可能会有四舍五入的误差。

浮点数就是小数,之所以称为浮点数,是因为按照科学计数法表示时,一个浮点数的小数点位置是可变的。比如,1.23x10^9和12.3x10^8是相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x10^9就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。

>>> 12.3e9
12300000000.0
>>> 1.23e10
12300000000.0

3、字符串(String)

字符串是以' '或" "括起来的任意文本,比如'abc',"xyz"等等。

请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符

>>> 'afv'
'afv'
>>> "afv"
'afv'

print语句支持对多个字符串进行输出,用','隔开就可以实现多个字符串的输出

>>>> 'hello','world'
('hello', 'world')
>>> print 'hello','world'
hello world</span>

如果字符串本身包含' ',则字符串用” “括起来

>>>> print I'm a student
  File "<stdin>", line 1
    print I'm a student
                      ^
SyntaxError: EOL while scanning string literal
>>> print "I'm a student"
I'm a student</span>

如果字符串本身包含" ",则字符串用' '括起来

>>>> print Learn "Python"
  File "<stdin>", line 1
    print Learn "Python"
                       ^
SyntaxError: invalid syntax
>>> print 'Learn "Python"'
Learn "Python"</span>

如果字符串既包含’ ‘又包含" ",就需要对字符串中的某些字符进行转义,Python用字符'\'进行转义,转义字符'\'不计入字符串内容。常用的转义字符还有:

\n 表示换行

\t 表示一个制表符

\\ 表示\本身

>>>> print "Bob said \"I\'m OK\"."
Bob said "I'm OK".
>>> print 'Bob said \"I\'m OK\".'
Bob said "I'm OK".
>>> print '"Thank you!"\n"You are welcome"'
"Thank you!"
"You are welcome"
>>> print '\t"Thank you!"'
	"Thank you!"
>>> print '\\"Thank you"\\'
\"Thank you"\</span>

当一个字符串含有多个需要转义的字符,对每个字符进行转义就显得很麻烦。为了避免这个情况,可以在该字符串前面加个前缀“r”,表示这是一个raw字符串,里面的字符不需要转义了。

#python2
>>> r'\(~_~)/ \(~_~)/'
'\\(~_~)/ \\(~_~)/'
>>> print r'\(~_~)/ \(~_~)/'
\(~_~)/ \(~_~)/
 
#python3
>>> r'\(~_~)/ \(~_~)/'
'\\(~_~)/ \\(~_~)/'
>>> print (r'\(~_~)/ \(~_~)/')
\(~_~)/ \(~_~)/

但是raw字符串不能表示多行字符串,也不能表示包含' '和" "的字符串,如果要表示多行字符串,可以用'''...'''表示

#python2
>>> '''Line One
... Line Two
... Line Three'''
'Line One\nLine Two\nLine Three'
>>> print '''Line One
... Line Two
... Line Three'''
Line One
Line Two
Line Three
#Python3
>>> '''Line One
... Line Two
... Line Three'''
'Line One\nLine Two\nLine Three'
>>> print ('''Line One
... Line Two
... Line Three''')
Line One
Line Two
Line Three

还可以在多行字符串前面加添加r,把这个多行字符串也变成raw字符串,即r'''...'''形式。

>>> r'''Line One
... Line Two
... Line Three'''
'Line One\nLine Two\nLine Three'

字符串还有一个编码问题。因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),0 - 255被用来表示大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母 A 的编码是65,小写字母 z 的编码是122。

如果要表示中文,显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。类似的,日文和韩文等其他语言也有这个问题。为了统一所有文字的编码,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。

Unicode通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为0就可以。

因为Python的诞生比Unicode标准发布的时间还要早,所以最早的Python只支持ASCII编码,普通的字符串'ABC'在Python内部都是ASCII编码的。

Python在后来添加了对Unicode的支持,以Unicode表示的字符串用u'...'表示

>>> print u"中文"
中文

Unicode字符串除了多了一个u之外,与普通字符串没啥区别,转义字符和多行表示法仍然有效:

转义:

>>> u'中文\n日文\n韩文'
u'\u4e2d\u6587\n\u65e5\u6587\n\u97e9\u6587'
>>> print u'中文\n日文\n韩文'
中文
日文
韩文

多行:

>>> u'''第一行
... 第二行'''
u'\u7b2c\u4e00\u884c\n\u7b2c\u4e8c\u884c'
>>> print u'''第一行
... 第二行'''
第一行
第二行

raw+多行:

>>> ur'''Python的Unicode字符串支持"中文"
... "日文"
... "韩文"等多种语言'''
u'Python\u7684Unicode\u5b57\u7b26\u4e32\u652f\u6301"\u4e2d\u6587"\n"\u65e5\u6587"\n"\u97e9\u6587"\u7b49\u591a\u79cd\u8bed\u8a00'
>>> print ur'''Python的Unicode字符串支持"中文"
... "日文"
... "韩文"等多种语言'''
Python的Unicode字符串支持"中文"
"日文"
"韩文"等多种语言

如果中文字符串在Python环境下遇到 UnicodeDecodeError,这是因为.py文件保存的格式有问题。可以在第一行添加注释

# -*- coding: utf-8 -*-

目的是告诉Python解释器,用UTF-8编码读取源代码。然后用Notepad++ 另存为... 并选择UTF-8格式保存。

例如:

文件p.py内容为:


在命令行中输入python p.py 后提示错误:

SyntaxError: Non-ASCII character '\xe4' in file p.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
修改文件p.py内容为:


在命令行重新执行python p.py后正确显示执行结果:

中文

4、布尔类型(Boolean)

布尔值和布尔代数的表示一致,有True和False两个值,在Python中,可以直接用True和False表示(注意大小写)。

布尔值可以用and、or、not运算:

and:与运算,双目运算,只有两个值都为True时,计算结果才为True
or:或运算,双目运算,只有一个值为True时,计算结果就为True
not:非运算,单目运算,把True变成False,把False变成True

>>> 100<99
False
>>> not 100<99
True
>>> 100<99 and 0>1
False
>>> 100<99 or 0<1
True

布尔类型还可以与其他数据类型做 and、or和not运算

>>> True and 'a=T' or 'a=F'
'a=T'

python把0、空字符串‘ ’和None看成 False,其他数值和非空字符串都看成 True。

and 和 or 运算的一条重要法则:短路计算。

在计算a and b时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;如果 a 是 True,则整个计算结果必定取决与 b,因此返回 b。

在计算a or b时,如果 a 是 True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。

>>> a and 'a=T' or 'a=F'
'a=T'
>>> a and 'a=T' and 'a=F'
'a=F'

所以python解释器在做布尔运算时,只要能提前确定计算结果,它就不会往后算了,直接返回结果。

5、空值(None)

空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
>>> None

6、整数和浮点数的运算

Python支持对整数和浮点数直接进行四则混合运算,运算规则和数学上的四则运算规则完全一致。

基本的运算:

>>> 1+2+3
6
>>> 4*5-6
14
>>> 7.5/8+2.1
3.0375

使用括号可以提升优先级,这和数学运算完全一致,注意只能使用小括号,但是括号可以嵌套很多层:

>>> (1+2)*3
9
>>> (2.2+3.3)/(1.5*(9-0.3))
0.42145593869731807

和数学运算不同的地方是,Python的整数运算结果仍然是整数,浮点数运算结果仍然是浮点数:

>>> 1+2
3
>>> 1.0+2.0
3.0

整数和浮点数混合运算的结果就变成浮点数了:

>>> 1+2.0
3.0

整数运算的结果永远是精确的,而浮点数运算的结果不一定精确,因为计算机内存再大,也无法精确表示出无限循环小数,比如1.0换成二进制表示就是无限循环小数。

python2中的整数除法,即使除不尽,结果仍然是整数,余数直接被扔掉。不过,python提供了一个求余的运算 % 可以计算余数:

#python2
>>> 11/3
3
>>> 11%3
2
#python3
>>> 11/3
3.6666666666666665
>>> 11%3
2

python3中的整数除法,如果除不尽,结果会是浮点数。

在python2中,如果我们要计算 11 / 4 的精确结果,按照“整数和浮点数混合运算的结果是浮点数”的法则,把两个数中的一个变成浮点数再运算就没问题了:

#python2
>>> 11/4
2
>>> 11.0/4
2.75
问题:计算 2.5 + 10 / 4 ,并解释计算结果为什么不是期望的 5.0 ?

>>> 2.5+10/4
4.5
>>> 2.5+10.0/4
5.0

其他几种数据类型:列表(List)、元组(Tuple)、集合(Set)以及字典(Dict)下次整理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值