2014-04-09 76 views
8

當前要圍繞一個字符串添加單引號,我想出的最佳解決方案是製作一個小包裝函數。Python 2.X圍繞一個字符串添加單引號

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

有沒有更容易pythonic這樣做呢?

+2

這樣做的背景(原因/原因)是什麼?如果你的字符串包含引號會怎麼樣?無論如何,嘗試's1 .__ repr __()'與各種字符串,看看這種行爲是否符合您的要求的用法。 – metatoaster

+0

@metatoaster我基本上需要連接許多字符串'+',有些需要單引號,有些不需要單引號,爲了節省行空間,我想出了上述解決方案 – pyCthon

+1

如果你得到一個匹配的字符串你的單引號標準,但也有一個單引號(如'that's'),使用你的方法會導致''that's'''。這是爲您的系統準備/允許的嗎?另外,出於性能原因,建議在字符串列表上使用'str.join'而不是使用'+'將單個字符串片段添加到一起。 – metatoaster

回答

10

這裏的另一種(也許更Python)的選項,使用format strings

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

什麼:

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

這是Stackoverflow標記爲低質量的帖子。註釋只是SO – Rico

+0

中的一個標準的餅乾裁剪器。對於格式化字符串的這種語法已被棄用,有利於使用我所示的'format()'方法回答 –

+5

@Rico:這顯然是一個答案,如果有疑問,請不要複習,絕對不要僅僅爲了自己的利益發布cookie切記。 – BoltClock

8

只是想突出什麼@metatoaster在上面的評論說,因爲我錯過了首先。

使用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\\\'"\'' 

docs狀態其基本上狀態再版(),即表示,是的逆eval()函數:

「對於許多類型,這個功能使得試圖返回傳遞給eval(時會產生一個對象具有相同的值)的字符串,..」

反向引用會更短,但Python 3+中的removed。 有趣的是,StackOverflow使用反引號來指定代碼跨度,而不是突出顯示代碼塊並單擊代碼按鈕 - 但它有一些有趣的行爲。