posts - 403, comments - 310, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          Python 學(xué)習(xí)筆記 (4)

          Posted on 2007-08-02 00:30 ZelluX 閱讀(335) 評論(0)  編輯  收藏 所屬分類: Scripting
          1.基于dictionary的字符串格式化
          >>> 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()) 

          就讀取了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方法。
          感覺這和Java的反射機(jī)制很相似,例如Javabean中的getter setter方法,也是通過特殊命名的形式讓其他對象了解自己的。

          3. import 語句可以寫在任何地方。
          主站蜘蛛池模板: 苍山县| 德庆县| 大埔区| 蒙阴县| 临江市| 辽中县| 房产| 丰顺县| 杭锦后旗| 清流县| 加查县| 家居| 桓仁| 舒兰市| 兴国县| 德钦县| 蓝山县| 蓬溪县| 闽侯县| 合水县| 旺苍县| 册亨县| 兴文县| 镇江市| 平陆县| 平南县| 大邑县| 安阳市| 开鲁县| 日喀则市| 崇义县| 阳朔县| 四子王旗| 荣成市| 九台市| 武义县| 垣曲县| 阿荣旗| 肥西县| 分宜县| 宜章县|