Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3283143
  • 博文数量: 815
  • 博客积分: 12898
  • 博客等级: 上将
  • 技术积分: 7883
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-25 09:57
文章分类

全部博文(815)

文章存档

2014年(1)

2011年(46)

2010年(192)

2009年(121)

2008年(70)

2007年(385)

分类: Python/Ruby

2007-11-09 15:03:13

>>> s = "this   is\natyu30's\ttest"
>>> print s
this    is
atyu30's        test
>>> print s.split()
['this', 'is', "atyu30's", 'test']
>>> print "".join(s.split())
thisisatyu30'stest
>>>
这是一个多行字符串,通过使用转义字符的定义代替了三重引号。\n 是一个回车,\t 是一个
                    50
  制表符。
  不带参数的 split 按照空白进行分割。所以三个空格、一个回车和一个制表符都是一样的。
  通过 split 分割字符串你可以将空格统一化;然后再以单个空格作为分隔符用 join 将其重新
  连接起来。这也就是 info 函数将多行 doc string 合并成单行所做的事情。
那么 info 函数到底用这些 lambda 函数、split 函数和 and-or 技巧做了些什么呢?
  processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)
processFunc 现在是一个函数,但是它到底是哪一个函数还要取决于 collapse 变量。如果
collapse 为真,processFunc(string) 将压缩空白;否则 processFunc(string) 将返回
未改变的参数。
在一个不很健壮的语言中实现它,像 Visual Basic,你很有可能要创建一个函数,接受一个字符串
参数和一个 collapse 参数,并使用 if 语句确定是否压缩空白,然后再返回相应的值。这种方式
是低效的,因为函数可能需要处理每一种可能的情况。每次你调用它,它将不得不在给出你所想
要的东西之前,判断是否要压缩空白。在 Python 中,你可以将决策逻辑拿到函数外面,而定义一
个裁减过的 lambda 函数提供确切的 (唯一的) 你想要的。这种方式更为高效、更为优雅,而且很
少引起那些令人讨厌 (哦,想到那些参数就头昏) 的错误。

阅读(2372) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~