第四章 介绍Python对象类型(1)
Python知识结构
Python程序可以分解成模块、语句、表达式及对象:
- 程序由模块组成
- 模块包含语句
- 语句包含表达式
- 表达式创建并处理对象
为什么要使用内置类型
- 强大的内置对象使程序更容易编写
- 内置对象可扩展
- 内置对象往往比定制的数据结构更有效率
- 内置对象是语言标准的一部分
Python核心数据类型
数字
python3.x的整数类型在需要的时候会自动提供额外的精度,以用于较大的数值
存在两种打印python对象的方式:全精度repr和用户友好形式str;2.7和3.x以后默认均为str
python包括常用数学工具math模块、random模块
还包括一些较为少见的数字对象(如复数、有理数、集合、布尔等)
字符串
用来记录文本信息和任意的字节集合,是python中提到的第一个作为序列的例子,严格来说字符串是由单字符的字符串所组成的序列。
序列——一个包含其他对象的有序集合;序列中的元素包含了一个从左到右的顺序。
序列操作
python中的变量不需要提前声明;当给一个变量赋值的时候就创建了它,可能赋的是任何类型的对象,并且当变量出现在一个表达式中的时候,就会用其值替换他。在使用变量的值之前必须对其赋值。
加号对于不同的对象有不同的意义,用于数字表示加法,用于字符串表示拼接——python多态的一种表现,一个操作的意义取决于被操作的对象
不可变性
字符串的不可变性——在创建后不能原位置改变;每个操作都被定义为生成新的字符串作为其结果
不能通过对其某一位置赋值而改变字符串,但是总可以简历一个新的字符串并以同一个变量名对其进行赋值;因为python在运行过程中会清理旧的对象
- 不可变——数字、字符串、元组
- 可变——列表、字典、集合
但是严格来说,可以在原位置改变基于文本的数据;需要扩展为一个独立字符构成的列表,然后不加入其他字符把他重新拼接起来;或者使用bytearray类型
特定类型的方法
前述方法在列表和元组中也可以用,接下来讲述只适用于字符串类型的方法。
- find(),子串查找
- replace(),全局搜索和替换
- split(),通过分隔符将字符串拆分为子串(一种简单的推导)
- upper(),大小写变换
- isalpha(),测试内容是否字母
- isdigit(),测试内容是否字母
- rstrip(),去除右侧空格字符 #lstrip(),strip()
s.rstrip().split(',')——在调用split方法前调用了rstrip方法,前一个方法调用结束会为后一个方法调用产生一个临时对象
格式化操作
- '%s' % ('1234') #all
- '{0},{1}'.format('you','me') #2.6+,3.0+
- '{},{}'.format('you','me') #2.7+,3.1+
- '{:,.2f}'.format(1234.5678) #输出1234.57
- '%.2f | %+05d' % (3.12159, -42)#输出3.14 | -0042
一条简明法则:通用操作以内置函数或表达式形式出现(len(x)、x[0]),特定操作以方法调用形式出现
寻求帮助
- 调用内置的dir函数;会返回一个包含了对象所有属性的列表
变量名中有双下划线的内容,代表了字符串对象的实现方式并支持定制(重载)
一般来说,有双下划线的变量名表示python实现细节的命名模式;没有双下划线的属性是字符串对象能调用的方法
- 查询方法是做什么的,可以传递给help函数
dir和help都可以作用于一个真实对象,或是一种数据类型;help命令相对比dir命令而言,在返回相同的函数列表的同时,还提供了完整的类型细节,并允许你使用类名查询一个具体的方法
字符串编程的其他方式
- 反斜杠转义序列表示特殊的字符,在python中表示为\xNN的十六进制,除非是可打印的字符
- python允许字符串中包含单引号或者双引号,采用不同的引号可以让另外一种引号被包含在其中
- python也允许三个引号中包含多行字符串字面量
- python也支持原始(raw)字符串字面量,即去掉反斜杠转义机制,这样的字符串字面量以字母“r”开头
unicode字符串
原书这个章节翻译比较差劲,可以直接参考http://www.ay1.cc/article/1682516261653341963.html; 或者第7章--字符串基础
unicode的支持是python不同版本间最大的差异之一
- 在python3.x中,基本的str字符串类型也能处理unicode(ascii是一种简单的unicode),并且用一种独特的bytes字符串类型表示原始字节值 (‘sp\xc4m’输出为'spÄm')
- 在python2.x中,unicode常量形式来支持 (u‘sp\u00c4m’输出为'spÄm')
- str通常既能处理8位的基于字符的字符串(包括ascii文本),也能处理原始字节值
- 一个独特的unicode字符串类型用于表示unicode文本
非unicode字符串在可能的情况下,是由ascii码打印的8位字节序列;而unicode字符串是unicode码序列。
bytearray字符串类型是一种bytes字符串
文本字符串包括3.x中的普通字符串和2.x中的unicode字符串;而字节字符串包括3.x中的字节串和2.x中的普通字符串
python2.x允许在一个表达式中混合使用其普通字符串和unicode字符串,只要普通字符串都由ascii字符组成;python3.x拥有一个更严格的模型,禁止在没有显示转换的情况下,将普通字符串和字节字符串混用
模式匹配
名为re的模块,不是字符串对象自己的方法,包含了搜索、分割、替换等调用
《Python学习手册(第五版)》学习随记