python第六章答案_python第六章

标签:

一、反射

cat = Cat(‘kitty‘)print cat.name #访问实例属性

cat.sayHi() #调用实例方法

print dir(cat) #获取实例的属性名,以列表形式返回

if hasattr(cat, ‘name‘): #检查实例是否有这个属性

setattr(cat, ‘name‘, ‘tiger‘) #same as: a.name = ‘tiger‘

print getattr(cat, ‘name‘) #same as: print a.name

getattr(cat,‘sayHi‘)() #same as: cat.sayHi()

dir([obj]): 调用这个方法将返回包含obj大多数属性名的列表(会有一些特殊的属性不包含在内)。obj的默认值是当前的模块对象。

hasattr(obj, attr):这个方法用于检查obj是否有一个名为attr的值的属性,返回一个布尔值。

getattr(obj, attr):调用这个方法将返回obj中名为attr值的属性的值,例如如果attr为‘bar‘,则返回obj.bar。

setattr(obj, attr, val): 调用这个方法将给obj的名为attr的值的属性赋值为val。例如如果attr为‘bar‘,则相当于obj.bar = val。

二、模块补充

__doc__: 文档字符串。如果模块没有文档,这个值是None。

*__name__: 始终是定义时的模块名;即使你使用import .. as 为它取了别名,或是赋值给了另一个变量名。

*__dict__: 包含了模块里可用的属性名-属性的字典;也就是可以使用模块名.属性名访问的对象。

__file__: 包含了该模块的文件路径。需要注意的是内建的模块没有这个属性,访问它会抛出异常!

importfnmatch as mprint m.__doc__.splitlines()[0] #Filename matching with shell patterns.

print m.__name__ #fnmatch

print m.__file__ #/usr/lib/python2.6/fnmatch.pyc

print m.__dict__.items()[0] #(‘fnmatchcase‘, )

json模块:

实际上JSON就是Python字典的字符串表示,但是字典作为一个复杂对象是无法直接传递,所以需要将其转换成字符串形式.转换的过程也是一种序列化过程.

用json.dumps序列化为json字符串格式

>>> importjson>>> dic {‘Connection‘: [‘keep-alive‘], ‘Host‘: [‘127.0.0.1:5000‘], ‘Cache-Control‘: [‘max-age=0‘]}>>> jdict = json.dumps({‘Connection‘: [‘keep-alive‘], ‘Host‘: [‘127.0.0.1:5000‘], ‘Cache-Control‘: [‘max-age=0‘]})>>> printjdict

{"Connection": ["keep-alive"], "Host": ["127.0.0.1:5000"], "Cache-Control": ["max-age=0"]}

虽然dic和jdict打印的字符串是相同的,但是实际它们的类型是不一样的.dic是字典类型,jdict是字符串类型

>>>type(jdic)>>>type(jdict)

可以用json.dumps序列化列表为json字符串格式

>>> list = [1, 4, 3, 2, 5]>>> jlist =json.dumps(list)>>> printjlist

[1, 4, 3, 2, 5]

json.loads把json字符串反序列化为python对象

son.loads(s[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])

re模块

martch和search的区别

Python提供了两种不同的原始操作:match和search。match是从字符串的起点开始做匹配,而search(perl默认)是从字符串做任意匹配。

注意:当正则表达式是‘ ^ ‘开头时,match与search是相同的。match只有当且仅当被匹配的字符串开头就能匹配 或 从pos参数的位置开始就能匹配 时才会成功。如下:

>>> import re

>>> re.match("c", "abcdef")

>>> re.search("c","abcdef")

>>> re.match("c", "cabcdef")

>>> re.search("c","cabcdef")

>>> patterm = re.compile("c")

>>> patterm.match("abcdef")

>>> patterm.match("abcdef",1)

>>> patterm.match("abcdef",2)

3.模块内容

re.compile(pattern, flags=0)

编译正则表达式,返回RegexObject对象,然后可以通过RegexObject对象调用match()和search()方法。

prog = re.compile(pattern)

result = prog.match(string)

result = re.match(pattern, string)

是等价的。

第一种方式能实现正则表达式的重用。

re.search(pattern, string, flags=0)

在字符串中查找,是否能匹配正则表达式。返回_sre.SRE_Match对象,如果不能匹配返回None。

re.match(pattern, string, flags=0)

字符串的开头是否能匹配正则表达式。返回_sre.SRE_Match对象,如果不能匹配返回None。

re.split(pattern, string, maxsplit=0)

通过正则表达式将字符串分离。如果用括号将正则表达式括起来,那么匹配的字符串也会被列入到list中返回。maxsplit是分离的次数,maxsplit=1分离一次,默认为0,不限制次数。

>>> re.split(‘\W+‘, ‘Words, words, words.‘)

[‘Words‘, ‘words‘, ‘words‘, ‘‘]

>>> re.split(‘(\W+)‘, ‘Words, words, words.‘)

[‘Words‘, ‘, ‘, ‘words‘, ‘, ‘, ‘words‘, ‘.‘, ‘‘]

>>> re.split(‘\W+‘, ‘Words, words, words.‘, 1)

[‘Words‘, ‘words, words.‘]

>>> re.split(‘[a-f]+‘, ‘0a3B9‘, flags=re.IGNORECASE)

注意:我使用的Python是2.6,查看源代码发现split()并没有flags的参数,2.7才增加。这种问题我发现不止一次了,官方的文档 跟 源码不一致的现象,如果发现异常,应该去源码中找找原因。

如果在字符串的开始或结尾就匹配,返回的list将会以空串开始或结尾。

>>> re.split(‘(\W+)‘, ‘...words, words...‘)

[‘‘, ‘...‘, ‘words‘, ‘, ‘, ‘words‘, ‘...‘, ‘‘]

如果字符串不能匹配,将会返回整个字符串的list。

>>> re.split("a","bbb")

[‘bbb‘]

re.findall(pattern, string, flags=0)

找到 RE 匹配的所有子串,并把它们作为一个列表返回。这个匹配是从左到右有序地返回。如果无匹配,返回空列表。

>>> re.findall("a","bcdef")

[]

>>> re.findall(r"\d+","12a32bc43jf3")

[‘12‘, ‘32‘, ‘43‘, ‘3‘]

re.finditer(pattern, string, flags=0)

找到 RE 匹配的所有子串,并把它们作为一个迭代器返回。这个匹配是从左到右有序地返回。如果无匹配,返回空列表。

>>> it = re.finditer(r"\d+","12a32bc43jf3")

>>> for match in it:

print match.group()

12

32

43

3

re.sub(pattern, repl, string, count=0, flags=0)

找到 RE 匹配的所有子串,并将其用一个不同的字符串替换。可选参数 count 是模式匹配後替换的最大次数;count 必须是非负整数。缺省值是 0 表示替换所有的匹配。如果无匹配,字符串将会无改变地返回。

re.subn(pattern, repl, string, count=0, flags=0)

与re.sub方法作用一样,但返回的是包含新字符串和替换执行次数的两元组。

re.escape(string)

对字符串中的非字母数字进行转义

re.purge()

清空缓存中的正则表达式

4.正则表达式对象

re.RegexObject

re.compile()返回RegexObject对象

re.MatchObject

group()返回被 RE 匹配的字符串

start()返回匹配开始的位置

end()返回匹配结束的位置

span()返回一个元组包含匹配 (开始,结束) 的位置

标签:

你可能感兴趣的:(python第六章答案)