worldsite / blog.sc

Blogging soul chat, stay cool. via: https://blog.sc

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Python基本数据类型

suhao opened this issue · comments

commented

python中一切皆对象,内置的对象类型有:数字、字符串、列表、字典、元组、文件、集合、布尔型、None等;编程单元类型有函数、模块、类,与实现相关的类型有编译的代码堆栈跟踪,还有套接字对象等。

(学会使用help万能函数,来探索功能哦)

下面,我们先来学习下基本的数据类型,也是核心数据类型。Python的基本数据类型有interge、boolean、string(字符串也称为序列)、list、tuple、dict,可以分为可变(list/dict)和不可变两类(interge/string/tuple)。

变量之赋值一切皆为引用,动态类型但是却是固定类型,不可动态转换

$ str = "abc"         #动态类型 
$ str + 1             #固定类型, ERROR: 不可动态转换
$ print 1 == 1        #print, 条件语句

一、数字

包括整数、浮点数、复数、十进制数、有理分数、集合等。常支持加减乘除,双星号的乘方等。。。

import math
import random

二、字符串:英文双引号,字节串

用来记录文本信息,是python的一种序列。序列包含元素并从左到右或者其他的可定义明了的顺序,可以根据相对位置存取。严格意义上,字符串是单个字符的字符序列,其他的还包含列表、元组。

首先讲下编码,在C++中有宽字节字符、窄字节字符、CP_ACP、CP_UTF8等,文件还有各种格式,如果不遵循统一的规则,或者接入各种第三方模块却未有明确约束,会深陷泥潭不可自拔。

在python中,默认的文件编码是ascii的,默认文件中是不能输入中文的;但是我们可以在文件开始加入utf-8标识来解决。这在C++中是依赖系统的文件属性,太不程序员了。。。

UTF-8是unicode的一种标准的实现。

请动手google搜索下如下两个概念,以及其区别哦。。。
ASCII码
Unicode编码标准

2.1 序列的操作

  • len:默认为ascii的字节长度
  • 转义符:反斜杠,让程序读懂文本** : r(raw原始字符串常量)不转义,u转utf-8字符串
  • 索引:偏移量从0开始,正向索引从左向右,反向索引从右向左
  • 切片:slice[i:j]不包含j,a[-1]取最后一个字符, a[0:]取字符串,负的索引号会简单的与字符串长度相加
  • 替换:replace,修改实际是新建了一个字符串
  • 拼接:%s %d, join
  • 读写文本:open('file.log', 'w');close()

python强制类型转换是失效的,如int("abc1222")是错误的

a = "中文"
#输出6,注意文件增加coding=utf-8也依旧输出6
print len(a)         

#输出2              
print len(u"中文");  
b = a.decode('utf-8')
print len(b)               

单引号,双引号,三引号:
三引号用于多行注释,单双引号可以用于嵌套引号

格式化%,format方法{偏移量占位},{name}

2.2 模式匹配

Python中进行模式匹配,需要导入re模块,包含了类似搜索、分割、替换等。

import re
match = re.match('hello[ \t]*(.*)[ \t]*world', 'Hello     Python world')
match.group(1)

三、列表

可存储任意类型对象,位置相关的,有序的集合,通过偏移来索引,支持嵌套,可变的类型。大小不固定,通过偏移量可以修改列表的大小。列表也是序列的一种,故支持各种序列操作。

最为强大的是,列表没有固定类型的约束。由于python中存储的元素可以看作是指针,故而可以在C++中理解为各种对象的指针void*

3.1 列表的操作

  • 切片:正向索引,反向索引,默认索引
  • 添加:+(生成一个新的列表), extend(接受参数并将该参数每个元素都添加到原有列表中,原地修改列表而不是新建列表);append(添加任意对象到列表末端);insert(插入任意对象到列表中,可以控制插入位置)
  • 修改:直接索引赋值即可
  • 删除:del(索引删除指定位置元素), remove(移除列表中的第一个匹配值,没找到则抛异常),pop(返回最后一个元素,并删除)
  • 成员关系:in not in,返回bool是否在列表中
  • 推导式/列表高级解析:[expr for iter in iterable (if cond_expr)]
  • 排序翻转:sort,reverse, 返回值均为none
  • 内置list方法:返回一个列表,参数为可迭代对象
  • xrange:开始,结束,步长,返回xrange对象,类似一个生成器;处理大量数据节省内存,或者在循环中使用
  • range:返回一个列表
a = [1,2,3]
print a[-1]

b = [[1,2,3],[4,5,6]]
print b

3.2 列表推导式之应用

["%s" % d for d in xrange(10)]
[(x,y) for x in range(2) for y in range(2)]
dict([(x,y) for x in range(2) for y in range(2)])

3.3 引用

b=a,则b为列表的同一个引用

3.4 del

  • del a:删除列表对象的引用
  • del a[:]:清空列表对象里的元素

四、元组和集合

4.1 元组

元组是一个有序的集合,通过偏移来取数据,属于不可变对象,不能原地修改无排序修改等操作

优点:保证数据安全,传递给一个不熟悉的方法或者数据接口时,可以保证方法和接口不会改变我们的数据,以免引发未知问题

a = (1,2,3)
a[1:3]
dir(a)
b = list(a)
b[0] = 5
type(b)
a = tuple(b)
print a

4.2 集合

集合没有顺序的概念,不能使用切片和索引操作

  • 创建:set可变集合,frozenset不可变集合
  • 添加:add,update
  • 删除:remove
  • 成员关系:in,not in
  • 交并差集:& | -
  • set去重:list转换为set,然后再转为list

五、字典

字典是无序,不能通过偏移存取,只能通过键来存取。

  • 内部没有顺序,可嵌套
  • 可以原地修改内容,可变类型
  • 键必须是不可变数据类型,如数字、字符串、元组等,列表、字典等可变对象不能作为键

5.1 字典的操作

  • 创建:{}、dict()
  • 添加内容:a[key]=value
  • 修改内容:a[key]=value,update
  • 删除:del,clear,pop
  • 成员关系:in、has_key
  • keys():返回列表,包含所有键
  • values():返回列表,包含所有值
  • items():生成一个字典的容器,[()]
  • get: