Python 2.X 给字符串添加单引号

13

目前,为了在字符串周围添加单引号,我想到的最佳解决方案是创建一个小的包装函数。

def foo(s1):
    return "'" + s1 + "'"

有没有更简单、更Pythonic的方法来完成这个任务?


2
这样做的背景是什么(原因/为什么)?如果您的字符串包含引号怎么办?无论如何,尝试使用各种字符串s1.__repr__()并查看此行为是否适合您所需的用途。 - metatoaster
@metatoaster,我基本上需要连接许多字符串+,其中一些需要单引号,而另一些则不需要。为了节省行空间,我想出了以上解决方案。 - pyCthon
1
如果您得到一个符合单引号标准但包含单引号的字符串(例如 that's),使用您的方法将导致 'that's'。这对于您的系统是有意或允许的吗?此外,出于性能原因,建议使用 str.join 而不是使用 + 将单个字符串片段添加到列表中。 - metatoaster
1
@metatoaster 只是上下文,是的,我正在重复使用上面 foo 函数的输出。 - pyCthon
3
那么只需要使用 __repr__() - metatoaster
显示剩余2条评论
4个回答

16

这里有另一种(也许更符合Python风格)的选项,使用格式化字符串

def foo(s1):
    return "'{}'".format(s1)

15

怎么样:

def foo(s1):
    return "'%s'" % s1

这种格式化字符串的语法已经被弃用,建议使用format()方法,如我所示的答案。 - Óscar López

13

我只是想强调一下@metatoaster在上面评论中说的话,因为我起初没注意到。

使用repr(string)将添加单引号,然后在其外面添加双引号,然后在其外面添加带有转义内部单引号的单引号,再进行其他转义。

使用内置函数repr()更直接,除非存在其他冲突。

s = 'strOrVar'
print s, repr(s), repr(repr(s)), ' ', repr(repr(repr(s))), repr(repr(repr(repr(s))))

# prints: strOrVar 'strOrVar' "'strOrVar'"   '"\'strOrVar\'"' '\'"\\\'strOrVar\\\'"\''

文档中说明repr()基本上是eval()的反向操作:

"对于许多类型,此函数尝试返回一个字符串,该字符串将在传递给eval()时产生相同值的对象.."

使用反引号表示可能更短,但在Python 3+版本中已被移除。 有趣的是,StackOverflow使用反引号来指定代码范围,而不是突出显示代码块并单击代码按钮-尽管它有一些有趣的行为。


2

这适用于Python 3.5及以上版本。

def foo2(char):
    return("'{}'".format(char))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接