WEB开发网
开发学院软件开发Python 可爱的 Python: 使用 Spark 模块解析 阅读

可爱的 Python: 使用 Spark 模块解析

 2007-03-29 12:07:02 来源:WEB开发网   
核心提示: 这里有一个有趣的地方,WordScanner 本身是一个完美的扫描程序类;但 Spark 扫描程序类本身可以通过继承进一步特化:子正则表达式模式在父正则表达式之前匹配,可爱的 Python: 使用 Spark 模块解析(5),而如果需要,子方法/正则表达式可以覆盖父方法/正则表达式,Wor

这里有一个有趣的地方。WordScanner 本身是一个完美的扫描程序类;但 Spark 扫描程序类本身可以通过继承进一步特化:子正则表达式模式在父正则表达式之前匹配,而如果需要,子方法/正则表达式可以覆盖父方法/正则表达式。所以,WordPlusScanner 将在 WordScanner 之前对特化进行匹配(可能会因此先获取一些字节)。模式文档字符串中允许使用任何正则表达式(举例来说, .t_contraction() 方法包含模式中的一个“向后插入”)。

不幸的是,Python 2.2 在一定程度上破坏了扫描程序继承逻辑。在 Python 2.2 中,不管在继承链中的什么地方定义,所有定义过的模式都按字母顺序(按名称)进行匹配。要修正这个问题,您可以在 Spark 函数 _namelist() 中修改一行代码:

清单 4. 纠正后相应的 spark.py 函数  def _namelist(instance):
  namelist, namedict, classlist = [], {}, [instance.__class__]
  for c in classlist:
    for b in c.__bases__:
      classlist.append(b)
    # for name in dir(c):  # dir() behavior changed in 2.2
    for name in c.__dict__.keys(): # <-- USE THIS
      if not namedict.has_key(name):
        namelist.append(name)
        namedict[name] = 1
  return namelist

我已经向 Spark 创始人 John Aycock 通知了这个问题,今后的版本会修正这个问题。同时,请在您自己的副本中作出修改。

让我们来看看,WordPlusScanner 在应用到上面那个“智能 ASCII”样本中后会发生什么。它创建的列表其实是一个 Token 实例的列表,但它们包含一个 .__repr__ 方法,该方法能让它们很好地显示以下信息:

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:可爱 Python 使用

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接