Python 数据类型
本文的Python知识基于 Python3
Python的基础数据结构
可以使用 type() 查看变量的类型
整数(int)
- Python可以处理任意大小的整数, 当然也包括
负整数 - 在程序中的标识方法和数学上的写法一摸一样
- 计算机是使用二进制的, 所以有时候我们会使用16进制表示
十六进制用
0x前缀, 后面跟0--9, a--f表示- 0xff00
- 0xa7dbd
在Python中, 任何一个不带小数点的数值, 我们都将之称之为整数
浮点数(float)
浮点数, 也称为小数
- 因为小数用科学计数法表示时, 小数点的位置是可变的
- 所以小数也被称之为
浮点数
- 整数和浮点数在计算机内部存储方式是不同的
Python中, 整数运算永远都是精确的(官方文档说的....)
- 包括
除法运算, 也是精确的
- 包括
- 而浮点数运算则可能会有
四舍五入的误差
字符串(str)
字符串是以
单引号或双引号括起来的任意文本- 'abc'
- "abcd"
- "I'm a boy."
- 'Press "Enter" Key to continue...'
- 'Press \'A\' to continue...'
- "Press \"Space\" to continue..."
- '66666\\88888'
注意: 字符串开始和结尾的
双引号或者单引号本身是一种表示方式, 并不属于字符串的一部分`- 'abc'的字符串是
abc这三个字符 - "abcd"的字符串是
abcd这四个字符
- 'abc'的字符串是
\是转义字符- 转义字符可以转义很多字符, 比如:
- n 换行
- t 制表符
- \\ 表示
\字符
如果字符串里有很多字符都需要转义, 写起来很麻烦
- Python允许使用
r表示字符串不需要转义
- Python允许使用
print(r'123\n123')
print(r"\t\t\nasd asd adssdf\n\n\n")- 如果字符串中有很多换行, 可以不使用
\n, 而使用'''括起来
print('''123123123
1213123
12312312''')布尔值(bool)
布尔值和布尔袋鼠的表示法完全一致
一个布尔值只有
True和False- 要么是
True - 要么是
False
- 要么是
- 大小写是敏感的
布尔值的操作
and
- 大小写敏感
与运算- 所有运算的值都为
True结果才为True - 否则结果为
False
or
- 大小写敏感
或运算- 所有运算的值都为
False结果才为False - 否则结果为
True
not
- 大小写敏感
非运算, 也叫取反- 它是一个
单目运算符 - 值为
True时结果为False - 值为
False时结果为True
异或
- Python里没有异或
- 但是可以用这样一句话实现
xor = bool(a) != bool(b)xor = a != b, a和b都是bool类型
None(NoneType)
- 空值
- 它是Python中的一个特殊值, 用
None表示 - 大小写敏感
None不能理解为0, 因为0是有意义的None是一个特殊的空值
字符串的常用函数
ord
- 返回当前
字符所对应的ASCII编码
- 返回当前
chr
- 返回当前ASCII编码对应的
字符
- 返回当前ASCII编码对应的
>>> ord('H')
72
>>> ord('a')
97
>>> ord('d')
100
>>> ord('e')
101
>>> ord('s')
115
>>> chr(72)
'H'
>>> chr(97)
'a'
>>> chr(100)
'd'
>>> chr(101)
'e'
>>> chr(115)
's'
>>> name = chr(72) + chr(97) + chr(100) + chr(101) + chr(115)
>>> print(name)
Hades
>>> chr(0)
'\x00'
>>> chr(33)
'!'
>>> ord('花')
33457
>>> ord('心')
24515
>>> ord('胡')
32993
>>> ord('萝')
33821
>>> ord('卜')
21340
>>> chr(33457)
'花'
>>> chr(24515)
'心'
>>> chr(32993)
'胡'
>>> chr(33821)
'萝'
>>> chr(21340)
'卜'
>>> name = chr(33457) + chr(24515) + chr(32993) + chr(33821) + chr(21340)
>>> print(name)
花心胡萝卜
>>> Python3默认使用Unicode, 可以支持中文
encode()
- 返回字符串指定编码的编码值
decode()
- 将编码值转换为指定编码的字符串
>>> name = 'abc'
>>> name.encode()
b'abc'
>>> name.encode('ascii')
b'abc'
>>> name = "花心胡萝卜"
>>> name.encode()
b'\xe8\x8a\xb1\xe5\xbf\x83\xe8\x83\xa1\xe8\x90\x9d\xe5\x8d\x9c'
>>> name.encode('utf-8')
b'\xe8\x8a\xb1\xe5\xbf\x83\xe8\x83\xa1\xe8\x90\x9d\xe5\x8d\x9c'
>>> name.encode().decode()
'花心胡萝卜'
>>> name = 'Hades工作室'
>>> name.encode
<built-in method encode of str object at 0x033D1B48>
>>> name.encode('utf-8')
b'Hades\xe5\xb7\xa5\xe4\xbd\x9c\xe5\xae\xa4'
>>> name = name.encode()
>>> print(name)
b'Hades\xe5\xb7\xa5\xe4\xbd\x9c\xe5\xae\xa4'
>>> name.decode()
'Hades工作室'
>>> name.decode('utf-8')
'Hades工作室'
>>> - 这里我们看到, 有的字符串前边有一个
b - 它表示, 这是一个
bytes literal, 也就是字节字面值 它表示每一个字符都占用一个byte, 都是一个byte
我们在看看如下语句
>>> name = b'abc'
>>> print(name)
b'abc'
>>> type(name)
<class 'bytes'>
>>> name = b"花心胡萝卜"
File "<stdin>", line 1
SyntaxError: bytes can only contain ASCII literal characters.
>>> name = b'\xe8\x8a\xb1\xe5\xbf\x83\xe8\x83\xa1\xe8\x90\x9d\xe5\x8d\x9c'
>>> print(name)
b'\xe8\x8a\xb1\xe5\xbf\x83\xe8\x83\xa1\xe8\x90\x9d\xe5\x8d\x9c'
>>> type(name)
<class 'bytes'>
>>> name = name.decode()
>>> print(name)
花心胡萝卜
>>> type(name)
<class 'str'>
>>> 由此可见, 有前缀b的字符串是byte类型的
len()
- 计算字符串的长度
- 需要注意
字符串的编码
>>> name = "花心胡萝卜"
>>> print(name)
花心胡萝卜
>>> len(name)
5
>>> name = name.encode()
>>> print(name)
b'\xe8\x8a\xb1\xe5\xbf\x83\xe8\x83\xa1\xe8\x90\x9d\xe5\x8d\x9c'
>>> len(name)
15
>>> name = b'\xe8\x8a\xb1\xe5\xbf\x83\xe8\x83\xa1\xe8\x90\x9d\xe5\x8d\x9c'
>>> print(name.decode())
花心胡萝卜
>>> len(name.decode())
5
>>> name = name.decode()
>>> len(name)
5
>>> 未完待续...
如有错误,请提出指正!谢谢.
本文由 花心胡萝卜 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: 2017-07-08 at 02:30 pm