【发布时间】:2012-10-17 05:52:00
【问题描述】:
因此,Python 没有提供明确的 C# 或 Java 风格的 StringBuilder 类。 请注意,我对 Python 有点陌生,所以我不确定我的想法是否好。
假设我想要一个装饰器(如果可能的话)将可迭代对象连接在一起。这个特定的例子可以用不同的方式实现,但我可以想到其他用例。所以...
@string_builder
def build_insert_statement(table_name, col_names, values, where_clause):
yield 'insert into '
yield table_name
yield ' ( '
yield ', '.join(col_names)
yield ' ) values ( '
yield ', '.join(values)
yield ' ) where '
yield where_clause
yield ';'
再次,我知道有其他方法可以做到这一点。然而,这能做到吗?装饰器可以始终尊重原始函数的签名,还是有时或根本不尊重?如果这是可能的,那么它是异端吗?为什么?
【问题讨论】:
-
它不是称为
StringBuilder,但您可以使用cStringIO.StringIO类,或者在Python 3 上使用io.StringIO类。此外,在 Python 上构建简单的字符串实际上非常快。 -
@DietrichEpp
StringIO为此目的相当不方便,因为它的目的是作为模拟文件,而不是作为“字符串生成器”。上次我检查它时重复获取值时速度出奇的慢(比包含字符串列表和str.join的手写对象慢几倍)。 -
@delnan:您能描述一下“模拟文件”和“字符串生成器”有何不同吗?你确定你说的是
cStringIO?此外,由于 OP 不会多次获得该值,因此在这种情况下的性能是无关紧要的。 -
我不能说这是否是好的做法,但它很聪明,我可以看到它很方便。
标签: python python-2.7 decorator stringbuilder