1.序列基础
1.1.标准类型操作符
标准类型操作符一般都能适用于所有的序列类型,如果作复合类型的对象比较的话,可能有所差别。
1.2.序列类型操作符
序列操作符 | 作用 |
seq[ind] | 获得下标为ind的元素 ind范围 0<=ind<=len(seq)-1 -len(seq)<=ind<=-1 |
seq[ind1:ind2] | 获得下标从ind1到ind2间的元素集合 ind范围 0<=ind<=len(seq)-1 -len(seq)<=ind<=-1 |
seq[::ind1] | 用步长来进制扩展的切片操作 |
seq*expr | 序列重复expr次 |
seq1+seq2 | 连接序列seq1和seq2 |
obj in seq | 判断obj元素是否包含在seq中 |
obj not in seq | 判断obj元素是否不包含在seq中 |
1.3.内建函数
函数 | 含义 |
list(iter) | 把可迭代对象转换为列表,创建序列对象的浅拷贝(只拷贝对对象的索引,不是重建对象) |
str(obj) | 把obj对象转换成字符串(对象的字符串表示法) |
unicode(obj) | 把对象转换成Unicode字符串(使用默认编码) |
basestring() | 抽象工厂函数,其作用仅仅是为str和unicode函数提供父类,所以不能被实例化,也不能被调用 |
tuple(iter) | 把一个可迭代对象转换成一个元组对象 |
enumerate(iter) | 接受一个可迭代对象作为参数,返回一个enumerate对象(同时也是一个迭代器),该对象生成由iter每个元素的index值和item值组成的元组 |
len(seq) | 返回seq的长度 |
max(iter,key=None) max(arg0,arg1...key=None) | 返回iter或(arg0,arg1,...)中的最大值,如果指定了key,这个key必须是一个可以传给sort |
min(iter,key=None) min(arg0,arg1...key=None) | 返回iter里面的最小值或者返回(arg0,arg1,...)里面的最小值;如果指定了Key,这个ke |
reversed(seq) | 接受一个序列作为参数,返回一个可以逆序访问的迭代器 |
sorted(iter,func=None,key=None,reverse=False) | 接受一个一个可迭代对象作为参数,返回一个有序的列表;可选参数func,key和reverse的含义跟list.sort()内建函数的参数一样 |
sum(seq,init=0) | 返回seq和可选参数init的综合,其效果等同于reduce(operator.add,seq,init) |
zip([it0,it1...itN]) | 返回一个列表,其第一个元素是it0、it1...这些元素的第一个元素组成的一个元组,第一个...依次类推 |
2.标准类型操作符
在做比较操作符的时候,字符串时安装ASCII值得大小来比较的
3.序列操作符
str1+str2
这种语法是在运行时字符串连接的加法操作,是非常标准的。
foo='Hello' 'world!'
这种一种程序员的习惯用法的语法,允许你在源码中把几个字符串连接在一起写,以此来构建新字符串(同时方便添加备注)
'Hello' + u' ' +'World' + u'!'
普通字符串和一个Unicode字符串做连接处理时,Python会在连接操作前先将普通字符串转化为Unicode字符串
4.只适用于字符串的操作符
4.1.格式化操作符(%)
格式化字符 | 转换方式 |
%c | 转换成字符(ASCII码值,或者长度为一的字符串) |
%r | 优先用repr()函数进行字符串转换 |
%s | 优先用str()函数进行字符串转换 |
%d/%i | 转成有符号十进制数 |
%u | 转成无符号十进制数 |
%o | 转成无符号八进制数 |
%x/%X | 转成无符号十六进制数(x/X代表转换后的十六进制字符的大小写) |
%e/%E | 转成科学计数法(e/E控制输出e/E) |
%f/%F | 转成浮点型(小数部分自然截断) |
%g/%G | %e/%E和%f/%F的简写 |
%% | 输出% |
Python支持两种格式的输入参数。第一种是元组,第二种是字典形式
4.2.格式化操作符辅助指令
符号 | 作用 |
* | 定了宽度或者小数点精度 |
- | 用做左对齐 |
+ | 在正数前面显示加号(+) |
<sp> | 在正数前面显示空格 |
# | 在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是x还是X) |
0 | 显示的数字前面填充'0'而不是默认的空格 |
% | '%%'输出一个单一的'%' |
(var) | 映射变量(字典参数) |
m.n | m是显示的最小总宽度,n是小数点后的位数(如果可用的话) |
4.3.字符串模板
字符串模板用以代替格式化操作符,更为简单和适用。通过from string import Template 引入Template对象,其有两个方法substitute()和safe_substitute().前者更为严谨,在key缺少的情况下会报一个KeyError的异常出来,而后者在缺少key时,直接原封不动的把字符串显示出来
>>> from string import Template
>>> s=Template('There are ${howmany} ${lang} Quotion Symbols')
>>> print s.substitute(lang='Python',howmany=3)
There are 3 Python Quotion Symbols
>>> print s.substitute(lang='Python')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/string.py", line 176, in substitute
return self.pattern.sub(convert, self.template)
File "/usr/lib/python2.7/string.py", line 166, in convert
val = mapping[named]
KeyError: 'howmany'
>>> print s.safe_substitute(lang='Python')
There are ${howmany} Python Quotion Symbols
>>>
4.4.原始字符串操作符(r/R)
关于原始字符串的目的,是为了对付那些在字符串中出现的特殊字符。在原始字符串里,所有的字符串都是直接按照字面的意思来使用,没有转义特殊或者不能打印的字符
4.5.Unicode字符串操作符(u/U)
Unicode字符串操作符,大写(U)和小写(u)是和Unicode字符串一起被引入的,用来把标准字符串或者是包含Unicode字符的字符串转换成完全的Unicode字符串对象
5.内建函数
5.1.标准类型函数
函数 | 功能 |
cmp(str1,str2) | 同比较操作符一致,都是根据字符串的ASCII码值进行比较 |
|
|
5.2.序列类型函数
函数 | 功能 |
len(str) | 返回字符串的字符数 |
max(str) | 返回字符串的最大的字符(按照ASCII码值排列) |
min(str) | 返回字符串的最小的字符(按照ASCII码值排列) |
enumerate(str) | 返回一个enumerate对象,该对象生成由iter每个元素的index值和字符串中字符组成的元组 |
zip(str1,str2) | 返回列表,其中每个元素为str1与str2的第i个字符组成的一个元组 |
|
|
|
|
5.3.字符串类型函数
函数 | 功能 |
raw_input(str) | 使用给定的字符串str提示用户输入并将这个输入作为字符串返回 |
str(obj) | 工厂函数,接受任意类型的对象,然后创建该对象的可打印的字符串表示。可作为参数传给isinstance()函数来判断一个对象的类型 |
unicode(obj) | 工厂函数,接受任意类型的对象,然后创建该对象的Unicode的字符串表示。可作为参数传给isinstance()函数来判断一个对象的类型.如果obj是对象,则需要该对象定义__unicode__()方法 |
chr() | 用一个范围在range(256)内的整数作为参数,返回一个对象的字符 |
unichr() | 用一个范围在range(X)内的整数作为参数,返回一个对象的Unicode字符.X的范围依赖于编码 USC2 65536或0x0000·0xFFFF,UCS4 1114112或0x000000-0x110000 |
ord() | 是chr和uichr的配对函数,以一个字符作为参数,返回对应的ASCII数值或者unicode数值。如果Unicode字符串超出Python定义范围,则返回TypeError异常 |
示例:
>>> isinstance('abcd',str)
True
>>> isinstance('abcd',unicode)
False
>>> isinstance(u'abcd',unicode)
True
6.字符串内建方法
方法 | 功能 |
string.capitalize() | 把字符串的第一个字符大写 |
string.center(width) | 返回一个原字符串居中,并使用空格填充☞长度width的新字符串 |
string.count(str,beg=0,end=len(string)) | 返回str在string里面出现的次数,如果beg或者end指定则返回指定范围内str出现的次数 |
string.decode(decoding='UTF-8',errors='strict') | 以decoding指定的编码格式解码string,如果出错默认报一个ValueError的异常,除非errors指定的是'ignore'或者'replace' |
string.encode(encoding='UTF-8',errors='strict') | 以encoding指定的编码格式解码string,如果出错默认报一个ValueError的异常,除非errors指定的是'ignore'或者'replace' |
string.endswith(obj,beg=0,end=len(string) | 检查字符串是否以obj结束,如果beg或者end指定则检查指定的范围内是否以obj结束,如果是,返回True,否则返回Fasle |
string.expandtabs(tabsize=8) | 把字符串string何种的tab符号转为空格,默认的空格数tabsize是8 |
string.find(str,beg=0,end=len(string)) | 检测str是否包含在string中,如果beg和end指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1 |
string.index(str,beg=0,end=len(string)) | 跟find()方法一样,只不过如果str不在string中会报一个异常 |
string.isalnum() | 如果string至少有一个字符并且所有字符都是字母或者数字则返回True,否则返回False |
string.isalpha() | 如果string至少有一个字符并且所有字符都是字母则返回True,否则返回False |
string.isdecimal() | 如果string只包含十进制数字则返回True,否则返回False |
string.isdigit() | 如果string只包含数字则返回True,否则返回False |
string.islower() | 如果string中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写则返回True,否则返回False |
string.isnumeric() | 如果string中只包含数字字符,则返回True,否则返回False |
string.isspace() | 如果string中只包含空格,则返回True,否则返回False |
string.istitle() | 如果string是标题化的(见title())则返回True,否则返回False |
string.isupper() | 如果string中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回True,否则返回False |
string.join(seq) | 以string作为分隔符,将seq中所有的元素(字符串表示)合并为一个新的字符串 |
string.ljust(width) | 返回一个原字符串左对齐,并使用空格填充至长度width的新字符串 |
string.lower() | 转换string中所有大写字符为小写 |
string.lstrip() | 截掉string左边的空格 |
string.partition(str) | 类似find和split的结合体,从str出现的第一个位置起,把字符串string分成一个3元组(string_pre_str,str,string_post_str),如果string中不包含str则string_pre_str==string |
string.replace(str1,str2,num=string.count(str1)) | 把string中的str1替换成str2,如果num指定,则替换不超过num次 |
string.rfind(str,beg=0,end=len(string)) | 类似于find函数,不过是从右边开始查找 |
string.rindex(str,beg=0,end=len(string)) | 类似于index函数,不过是从右边开始 |
string.rjust(width) | 返回一个原字符串右对齐,并使用空格填充至长度width的新字符串 |
stirng.rpartition(str) | 类似于partition函数,不过是从右边开始查找 |
string.rstrip() | 删除string字符串末尾的空格 |
string.split(str="",num=string.count(str)) | 以str为分隔符切片string,如果num有指定值,则仅分割num个子字符串 |
string.splitlines(num=string.count('\n')) | 按照行分割,返回一个保护各行作为元素的列表,如果num指定则仅切片num行 |
string.startswith(obj,beg=0,end=len(string)) | 检查字符串是否是以obj开头,是则返回True,否则返回False,如果beg和end指定值,则在指定范围内检查 |
string.strip([obj]) | 在string上执行lstrip和rstrip |
string.swapcase() | 翻转string中的大小写 |
string.title() | 返回‘标题化’的string,就是说所有单词都是以大写开始,其余字母均为小写(见istitle) |
string.translate(str,del="") | 根据str给出的表(包含256个字符)转换string的字符,要过滤掉的字符放到del参数中 |
string.upper() | 转换string中的小写字母为大写 |
string.zfill(width) | 返回长度为width的字符串,原字符串string右对应,前面填充0 |
|
|
7.字符串的独特特性
7.1.特殊字符串和控制字符
一个反斜线加一个单一字符可以表示一个特殊字符,通常是一个不可打印的字符。
转义字符 | 八进制 | 十进制 | 十六进制 | 字符 | 说明 |
\0 | 000 | 0 | 0x00 | NULL | 空字符Null |
\a | 007 | 7 | 0x07 | BEL | 响铃字符 |
\b | 010 | 8 | 0x08 | BS | 退格 |
\t | 011 | 9 | 0x09 | HT | 横向制表符 |
\n | 012 | 10 | 0x0A | LF | 换行 |
\v | 013 | 11 | 0x0B | VT | 纵向制表符 |
\f | 014 | 12 | 0x0C | FF | 换页 |
\r | 015 | 13 | 0x0D | CR | 回车 |
\e | 033 | 27 | 0x1B | ESC | 转义 |
\" | 042 | 34 | 0x22 | " | 双引号 |
\' | 047 | 39 | 0x27 | ' | 单引号 |
\\ | 134 | 92 | 0x5C | \ | 反斜杠 |
7.2.三引号
Python的三引号允许一个字符串跨多行,字符串中可以保护换行符,制表符以及其他特殊字符。三引号的语法是一对连续的单引号或者双引号(通常都是成对的用)
7.3.字符串不变性
8.Unicode
Unicode使得计算机可以支持多种语言,通过使用一个或多个字节来表示一个字符的方法突破了ASCII的限制。
string模块只保留了ASCII码的支持,故而string模块已经不推荐使用,在任何需要跟Unicode兼容的代码里都不要使用该模块
内建的str函数和chr函数并没有升级成可以处理Unicode。他们只能处理常规的ASCII编码字符,如果一个Unicode字符串被作为参数传给了str函数,首先会被转换为ASCII字符串然后在交给str函数。如果该Unicode字符串包含任何不被ASCII字符串支持的字符,会导致str函数报异常
>>> str(u'abc')
'abc'
>>>
>>> str(u'中国')
File "<stdin>", line 1
str(u中国')
^
SyntaxError: invalid syntax
8.1.unicode使用规则
· 程序中出现字符串时一定要加个前缀u
· 不要用str()函数,用unicode()代替
· 不要用过时的string模块
· 不到必须时不要在程序中编解码Unicode字符,只在要写入文件或数据库或者网络时,才调用encode()函数;相应的,只在需要把数据读回来的时候才调用decode()函数
9.相关模块
模块 | 说明 |
string | 字符串操作相关函数和工具,比如Templaye类 |
re | 正则表达式:强大的字符串模式匹配模块 |
struct | 字符串和二进制之前的转换 |
c/StringIO | 字符串缓冲对象,操作方法类似于file对象 |
base64 | Base16,32和64数据编解码 |
codecs | 解码其注册和基类 |
crypt | 进行单方面加密 |
difflib | 找出序列间的不同 |
hashlib | 多种不同安全哈希算法和信息摘要算法的API |
hma | HMAC信息鉴权算法的Python实现 |
md5 | RSA的MD5信息摘要鉴权 |
rotor | 提供多平台的加解密服务 |
sha | NIAT的安全哈希算法SHA |
stringprep | 提供用于IP协议的Unicode字符串 |
textwrap | 文本包装盒填充 |
unicodedata | Unicode数据库 |