成员关系操作符(in,not in)
equence1+ sequence2
该表达式的结果是一个包含sequence1和sequence2的内容的新序列.注意,这种方式看
起来似乎实现了把两个序列内容合并的概念,但是这个操作不是最快或者说最有效的。
>>>
>>>
>>>
...
...
abc
s= 'abcde'
i= -1
fori in range(-1, -len(s), -1):
prints[:i]
abcd
ab
a
用None作为索引值,这样一来就可以满足你的需要,比如说,在你想用一个变量作为索引来从第一个到遍历最后一个元素的时候:
>>>s = 'abcde'
>>>for i in [None] + range(-1, -len(s), -1):
...print s[:i]
...
abcde
abcd
abc
ab
a
似乎还可以先创建一个只包含None的列表,然后用extend()函数把range()的输出添加到这个列表,或者先建立range()输出组成的列表然后再把None插入到这个列表的最前面,然后对这个列表进行遍历,
但是可变对象的内建函数extend()根本就没有返回值,所以这个方法是行不通的。
>>>for i in [None].extend(range(-1, -len(s), -1)):
...print s[:i]
...
Traceback(most recent call last):
File"<stdin>", line 1, in ?
TypeError:iteration over non-sequence
>>>s = str(range(4)) # 把一个列表转换成一个字符串
>>>s
'[0,1, 2, 3]'
如何改变字符串
>>aString = aString[:6] + 'Python!'
>>>aString
'HelloPython!'
如何删除字符和字符串
>>>aString = 'Hello World!'
>>>aString = aString[:3] + aString[4:]
>>>aString
'HeloWorld!'
连接符(+ )运行时刻字符串连接
>>>'Spanish' + 'Inquisition'
'SpanishInquisition'
编译时字符串连接
>>>foo = "Hello" 'world!'
>>>foo
'Helloworld!'
>>>
...
...
...
f= urllib.urlopen('http://' # protocol
'localhost'# hostname
':8000'# port
'/cgi-bin/friends2.py')# file
原始字符串操作符(r/R )
>>>'\n'
'\n'
>>>print '\n'
>>>r'\n'
'\\n'
>>>print r'\n'
\n
>>>f = open('C:\windows\temp\readme.txt', 'r')
Traceback(most recent call last):
File"<stdin>", line 1, in ?
f= open('C:\windows\temp\readme.txt', 'r')
IOError:[Errno 2] No such file or directory: 'C:\\win-dows\\temp\readme.txt'
>>>f = open(r'C:\windows\temp\readme.txt', 'r')
>>>f.readline()
'Tableof Contents (please check timestamps for last update!)\n'
>>>f.close()
>>>import re
>>>m = re.search('\\[rtfvn]', r'Hello World!\n')
>>>if m is not None: m.group()
...
>>>m = re.search(r'\\[rtfvn]', r'Hello World!\n')
>>>if m is not None: m.group()
...
'\\n'
enumerate()函数
>>>s = 'foobar'
>>>for i, t in enumerate(s):
...
printi, t
zip()函数
>>>s, t = 'foa', 'obr'
>>>zip(s, t)
[('f','o'), ('o', 'b'), ('a', 'r')]
方法
string.capitalize()
把字符串的第一个字符大写
string.center(width)
返回一个原字符串居中,并使用空格填充至长度width的新字符
串
string.count(str,beg=0,end=len(string))
返回str在 string里面出现的次数,如果beg或者 end指定则
返回指定范围内str出现的次数
string.decode(encoding='UTF-8',errors='strict')
以encoding指定的编码格式解码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,否则返回False.
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()b,c 如果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)Merges (concatenates)
以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的新字符串
string.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
>>>a = [6, 4, 5]
>>>reduce(operator.add, a)
在使用可变对象的方法如sort(),extend()和reverse()的时候要注意,这些操作会在列表中原地执行操作,也就是说现有的列表内容会被改变;如果你确实需要返回一个对象,使用reversed()和sorted()内建数.
所有函数返回的多对象(不包括有符号封装的)都是元组类型。
deffoo1():
:
returnobj1, obj2, obj3
拷贝Python对象浅拷贝和深拷贝
当你创建一个对象,然后把它赋给另一个变量的时候,Python并没有拷贝这个对象,而是拷贝了这个对象的引用。
序列类型对象的浅拷贝是默认类型拷贝,并可以以下几种方式实施:
(1)完全切片操作[:]
(2)利用工厂函数,比如list(),dict()等
(3)使用copy模块的copy函数.
这两个列表的两个对象中,第一个对象是不可变的(是个字符串类型),而第二个是可变的(一
个列表).正因为如此,当进行浅拷贝时,字符串被显式的拷贝,并新创建了一个字符串对象,而列
表元素只是把它的引用复制了一下,并不是它的成员.所以改变名字没有任何问题,但是更改他
们银行账号的任何信息都会引发问题.
BEFORE:
>>>[id(x) for x in hubby]
[9919616,11826320]
>>>[id(x) for x in wifey]
[9919616,11826320]
AFTER:
>>>[id(x)
[12092832,
>>>[id(x)
[12191712,
forx in hubby]
11826320]
forx in wifey]
11826320]
要得到一个完全拷贝或者说深拷贝--创建一个新的容器对象,包含原有对象元素(引用)全新拷贝的引用--需要copy.deepcopy()函数.
>>>newPerson = copy.deepcopy(person)
第一,非容器类型(比如数字,字符串和其他"原子"类型的对象,像代码,类型和xrange对象等)没有被拷贝一说,浅拷贝是用完全切片操作来完成的.
第二,如果元组变量只包含原子类型对象,对它的深拷贝将不会进行.如果我们把账户信息改成元组类
型,那么即便按我们的要求使用深拷贝操作也只能得到一个浅拷贝
其实copy模块中只有两个函数可用:copy()进行浅拷贝操作,而deepcopy()进行深拷贝操作.