1.基于dictionary的字符串格式化
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
>>> "%(pwd)s" % params
'secret'
這個(gè)東西的用處在于和locals的搭配使用,比如樣例程序中
感覺這和Java的反射機(jī)制很相似,例如Javabean中的getter setter方法,也是通過特殊命名的形式讓其他對象了解自己的。
3. import 語句可以寫在任何地方。
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
>>> "%(pwd)s" % params
'secret'
這個(gè)東西的用處在于和locals的搭配使用,比如樣例程序中
def handle_comment(self, text):
self.pieces.append("<!--%(text)s-->" % locals())
self.pieces.append("<!--%(text)s-->" % locals())
就讀取了text變量的內(nèi)容。
不過這樣和直接用text變量有什么區(qū)別呢?貌似"<!--%s-->" % text也可以啊
水木上問了一下,得到的答案是
發(fā)信人: Essien5 (寶貝晶~), 信區(qū): Python
標(biāo) 題: Re: 關(guān)于locals()的用處
發(fā)信站: 水木社區(qū) (Thu Aug 2 11:16:37 2007), 轉(zhuǎn)信
好處就是多個(gè)變量是代碼很好維護(hù),一一對應(yīng)
'%s%s.......%s'%(a,b,c,d,....,z)
'%(a)s%(b)s......%(z)s'%locals()
第一種寫法前面的%s和后面的變量很難對應(yīng)起來,bug的源泉
后一個(gè)就非常直觀了
而且要往中間再隨便插變量也方便
2. 自己的類繼承了SGMLParser后,需要對特殊標(biāo)記處理,可以以start_或do_開始命名相關(guān)函數(shù)。
可以這樣做的原因在于python的自醒機(jī)制(introspection)
def finish_starttag(self, tag, attrs):
try:
method = getattr(self, 'start_' + tag)
except AttributeError:
try:
method = getattr(self, 'do_' + tag)
except AttributeError:
self.unknown_starttag(tag, attrs)
return -1
else:
self.handle_starttag(tag, method, attrs)
return 0
else:
self.stack.append(tag)
self.handle_starttag(tag, method, attrs)
return 1
程序首先嘗試獲得start_tagname的方法,如果失敗則繼續(xù)嘗試獲得do_tagname,如果仍然不能找到,則調(diào)用unknown_starttag方法。try:
method = getattr(self, 'start_' + tag)
except AttributeError:
try:
method = getattr(self, 'do_' + tag)
except AttributeError:
self.unknown_starttag(tag, attrs)
return -1
else:
self.handle_starttag(tag, method, attrs)
return 0
else:
self.stack.append(tag)
self.handle_starttag(tag, method, attrs)
return 1
感覺這和Java的反射機(jī)制很相似,例如Javabean中的getter setter方法,也是通過特殊命名的形式讓其他對象了解自己的。
3. import 語句可以寫在任何地方。