python基本类型和编码
2019-11-06 本文已影响0人
张磊_e325
[TOC]
一、数据类型(python和java比较的学习)
差异 | python | java |
---|---|---|
布尔值 | True and not False | true $$ !false |
空值 | None | null |
字符串 | 单引号或双引号 | 双引号 |
多行字符串 | 单引号或双引号 | 双引号 |
java声明变量时静态语言,必须指定类型。python是动态语言,如下:
int a = 123; // a是整数类型变量
a = "ABC"; // 错误:不能把字符串赋给整型变量
a = 123 # a是整数
print(a)
a = 'ABC' # a变为字符串
print(a)
二、数据类型
1. 常识
1字符=2字节(byte)=16比特(bit)
一个字节能表示的最大的整数就是255(二进制11111111=十进制255)
一个字符就是65535(2**16=65536)
面(笔)试偶尔会考:
>>> ord('A')
65
>>> ord('a')
97
字符 | ASCII | Unicode | UTF-8 |
---|---|---|---|
1byte | 2byte | 1-6byte | |
A | 01000001 | 00000000 01000001 | 01000001 |
中 | -- | 01001110 00101101 | 11100100 10111000 10101101 |
解释:
- 计算机是美国人发明的,所以ASCII码只有127个字符,包括大小写字母,数字及一些常用符号
- 所以各国家为自己的文字编写了各自的编码,如中国制定了GB2312编码,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里。因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
- 但是与ASCII码重叠的字符,Unicode需要使用2倍的空间去存储,所以出现了变长编码UTF-8
- 在计算机内存中(编辑器等),统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
三、Python的字符串
- 单个字符的整数表示与字符间转换
>>> ord('A')
>>> chr(66)
-
Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。
x = b'ABC'
-
编码和解码,遇到无法编码或解码会报错。使用errors='ignore'可以忽略错误
>>> 'ABC'.encode('ascii')
>>> '中文'.encode('utf-8')
>>>b'ABC'.decode('ascii')
>>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')
- len()函数计算的是str的字符数,如果换成bytes,len()函数就计算字节数:
# 几个字符
>>> len('ABC')
3
>>> len('中文')
2
# 几个字节
>>> len(b'ABC')
3
>>> len(b'\xe4\xb8\xad\xe6\x96\x87')
6
>>> len('中文'.encode('utf-8'))
6
-
python中str与bytes转换一定要指定utf8编码,保存一定要指定utf8
源码开头都要加,并且保证文本编辑器正在使用UTF-8 without BOM编码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
如果.py文件本身使用UTF-8编码,并且也申明了# -- coding: utf-8 --,打开命令提示符测试就可以正常显示
- 在Python中,采用的格式化方式和C语言是一致的,用%实现
占位符 | 替换内容 |
---|---|
%d | 整数 |
%s | 字符串 |
%f | 浮点数 |
%x | 16进制 |
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'
不知道用什么类型,就用%s。
普通的%,需要转义,%%
另一种格式化format(),太麻烦