>>> 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 函数提供确切的 (唯一的) 你想要的。这种方式更为高效、更为优雅,而且很
少引起那些令人讨厌 (哦,想到那些参数就头昏) 的错误。
阅读(1977) | 评论(0) | 转发(0) |