标签:
一、反射
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()
二、模块补充
import fnmatch as m print 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‘, <function>)</function>
json模块:
实际上JSON就是Python字典的字符串表示,但是字典作为一个复杂对象是无法直接传递,所以需要将其转换成字符串形式.转换的过程也是一种序列化过程.
用json.dumps序列化为json字符串格式
>>> import json >>> 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‘]}) >>> print jdict {"Connection": ["keep-alive"], "Host": ["127.0.0.1:5000"], "Cache-Control": ["max-age=0"]}
虽然dic和jdict打印的字符串是相同的,但是实际它们的类型是不一样的.dic是字典类型,jdict是字符串类型
<type ‘dict‘> >>> type(jdic) >>> type(jdict) <type ‘str‘>
可以用json.dumps序列化列表为json字符串格式
>>> list = [1, 4, 3, 2, 5] >>> jlist = json.dumps(list) >>> print jlist [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模块
Python提供了两种不同的原始操作:match和search。match是从字符串的起点开始做匹配,而search(perl默认)是从字符串做任意匹配。
注意:当正则表达式是‘ ^ ‘开头时,match与search是相同的。match只有当且仅当被匹配的字符串开头就能匹配 或 从pos参数的位置开始就能匹配 时才会成功。如下:
>>> import re
>>> re.match("c", "abcdef")
>>> re.search("c","abcdef")
<_sre.SRE_Match object at 0x00A9A988>
>>> re.match("c", "cabcdef")
<_sre.SRE_Match object at 0x00A9AB80>
>>> re.search("c","cabcdef")
<_sre.SRE_Match object at 0x00AF1720>
>>> patterm = re.compile("c")
>>> patterm.match("abcdef")
>>> patterm.match("abcdef",1)
>>> patterm.match("abcdef",2)
<_sre.SRE_Match object at 0x00A9AB80>
编译正则表达式,返回RegexObject对象,然后可以通过RegexObject对象调用match()和search()方法。
prog = re.compile(pattern)
result = prog.match(string)
跟
result = re.match(pattern, string)
是等价的。
第一种方式能实现正则表达式的重用。
在字符串中查找,是否能匹配正则表达式。返回_sre.SRE_Match对象,如果不能匹配返回None。
字符串的开头是否能匹配正则表达式。返回_sre.SRE_Match对象,如果不能匹配返回None。
通过正则表达式将字符串分离。如果用括号将正则表达式括起来,那么匹配的字符串也会被列入到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 匹配的所有子串,并把它们作为一个列表返回。这个匹配是从左到右有序地返回。如果无匹配,返回空列表。
>>> re.findall("a","bcdef")
[]
>>> re.findall(r"\d+","12a32bc43jf3")
[‘12‘, ‘32‘, ‘43‘, ‘3‘]
找到 RE 匹配的所有子串,并把它们作为一个迭代器返回。这个匹配是从左到右有序地返回。如果无匹配,返回空列表。
>>> it = re.finditer(r"\d+","12a32bc43jf3")
>>> for match in it:
print match.group()
12
32
43
3
找到 RE 匹配的所有子串,并将其用一个不同的字符串替换。可选参数 count 是模式匹配後替换的最大次数;count 必须是非负整数。缺省值是 0 表示替换所有的匹配。如果无匹配,字符串将会无改变地返回。
与re.sub方法作用一样,但返回的是包含新字符串和替换执行次数的两元组。
对字符串中的非字母数字进行转义
清空缓存中的正则表达式
re.compile()返回RegexObject对象
group()返回被 RE 匹配的字符串
start()返回匹配开始的位置
end()返回匹配结束的位置
span()返回一个元组包含匹配 (开始,结束) 的位置
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()
标签:
原文地址:http://www.cnblogs.com/lidong94/p/5595139.html