数据类型和变量
Python可以处理的数据包括:整数,浮点数,字符串,逻辑判断值/布尔值
(1)整数
python不仅可以处理十进制的数据,还可以处理二进制,以ox前缀表示16进制。
对于很大的数,可以用_表示位数,比如100_000
(2)浮点数
对于很小或者很大的浮点数,用e代表10,例如0.00005=5e-5
(3)字符串
用双引号或者单引号表示字符串,这里比较特殊的是转义字符。
转义字符是用\可以代替一些特殊用法。
比如\t为制表符
\代表在字符串中使用""
\n为换行符
如果字符串中单双引号均存在,可以用'表示字符串中的单引号或者"表示字符串中的双引号
如果想取消字符串中的转义符,可以使用r"xxx"(或者将双引号换成单引号均可)。
'''xxx'''表示在多行显示字符串
print('name\t age\t nation\t height\t weight\t')
print('name\n age\n nation\n height\n weight\n')
print('name\\age\\nation')
print("that's \''good\"")
print("\\\n\\")
print(r"\\\n\\")
print('''xxx
xxx
xxx"')
(4)逻辑值
逻辑值包括True,False两种,并且还可以进行运算(and or not 逻辑运算 )
In : 3>2
Out : True
In : True and True
Out : True
In :False or True
Out : True
In : not 1>2
Out : True
if age > 18:
print('adult')
else :
print('teenager')
(5)空值
NONE表示空值,但是并不等于0
字符和编码问题
计算机只能处理数字,无法处理文本。因此需要将文本转化问数字处理。8个bit作为1个bytes,因此编码的最大的数就是11111111=255,数量超过了这个范围就需要更多的字节来存储。
最初存储所用的是ASCII码,只能编码127个字符,如果想编码其他语言的文字,就需要参照另外的编码体系。为了统一不同国家的语言,Unicode应运而生,解决了不同语言的文字可能会产生的乱码的问题。现在大多数的语言和软件都是支持Unicode编码的。
Unicode通常是用2个字节去编码,ASCII转换为Unicode只需要在前面加上1个字节的0即可。但是不管是一些简单的字符还是复杂的字符,都会占用2个bytes的空间,为了节约,把Unicode编码转化为了UTF-8编码。UTF-8使用2-6个字节去存储文本,大小根据文本的复杂程度调整。因此ASCII码也被包含在了UTF-8中。
用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件。而Python在内存中是以Unicode存储,当读取到硬盘或者传输的时候,需要转化为bytes形式。如果string对应的bytes能以ASCII码显示,则输出原字符,否则以16进制表示。相反如果从网络上传输的bytes数据转成string形式,需要decode。
python是以Unicode编码的,支持多语言的文本。
了解几个函数ord(),chr(),string.encode()和string.decode()
In : "ABC".encode('ascii')
Out : b'ABC' #b表示bytes格式,如果结果是ASCII码中对应的字符,则输出该字符,否则输出对应形式编码的16进制bytes
In : "你好".encode('utf-8')
Out : b'\xe4\xbd\xa0\xe5\xa5\xbd' #用utf-8编码的bytes形式,表示占用了6个字节
In : b'ABC'.decode('ascii')
Out : ABC
In : ord('a') #将字符转换为编码的十进制整数
Out : 97
In : type(ord('a'))
Out :int
In : chr('65') #将整数转换为字符
Out : A
len()函数统计string的字符数/字节数(如果是bytes数据的话)。
len('ABC')
len(b'\xe4\xbd\xa0\xe5\xa5\xbd')
为了避免乱码的问题,在编写和保存Python脚本的时候需要用UTF-8格式,在脚本的开头需要写上:
# -*- coding:utf-8 -*-
表示以UTF-8的形式编码,不要包含BOM,因为BOM一般对微软有效,在其他系统上可能造成问题。标准的格式是UTF-8 without BOM。
网友评论