Python

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

解释:

  1. 计算机是美国人发明的,所以ASCII码只有127个字符,包括大小写字母,数字及一些常用符号
  2. 所以各国家为自己的文字编写了各自的编码,如中国制定了GB2312编码,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里。因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
  3. 但是与ASCII码重叠的字符,Unicode需要使用2倍的空间去存储,所以出现了变长编码UTF-8
  4. 在计算机内存中(编辑器等),统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

三、Python的字符串

  1. 单个字符的整数表示与字符间转换
>>> ord('A')
>>> chr(66)
  1. Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。
    x = b'ABC'

  2. 编码和解码,遇到无法编码或解码会报错。使用errors='ignore'可以忽略错误

>>> 'ABC'.encode('ascii')
>>> '中文'.encode('utf-8')
>>>b'ABC'.decode('ascii')
>>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')
  1. 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
  1. python中str与bytes转换一定要指定utf8编码,保存一定要指定utf8
    源码开头都要加,并且保证文本编辑器正在使用UTF-8 without BOM编码
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

如果.py文件本身使用UTF-8编码,并且也申明了# -- coding: utf-8 --,打开命令提示符测试就可以正常显示

  1. 在Python中,采用的格式化方式和C语言是一致的,用%实现
占位符 替换内容
%d 整数
%s 字符串
%f 浮点数
%x 16进制
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'

不知道用什么类型,就用%s。
普通的%,需要转义,%%

另一种格式化format(),太麻烦

上一篇 下一篇

猜你喜欢

热点阅读