2016-03-13 106 views
4

我試圖做這樣的事情:Python 3中的字符串替換?

subs = 'world' 
"Hello {[subs]}" 

在Python 3

我不能完全弄清楚的語法(是否來自紅寶石/ PHP)。我錯過了什麼嗎?文檔中的%操作符我認爲是不推薦使用的Python 2.x。

+0

'潛艇=「world''' 「你好{}」 格式(潛艇)' – jDo

回答

9

您有格式兩種選擇:老python2風格%運營商,與C-printf風格的作品格式化字符串,以及字符串的新python3風格format()方法。由於backporting,你可以在python2和python3中使用這兩個選項。

%格式化器,其接受C-printf風格格式的字符串:

"Hello %s" % subs 
"Hello %s%s" % (subs, '.') 
my_dict = {'placeholder_name': 'world', 'period': '.'} 
"Hello %(placeholder_name)s%(period)s" % my_dict 

注意,在蟒%s格式說明接受任何類型的對象(整數,類的實例,等)作爲輸入,並將其轉換與str()運算符的字符串相當方便。 %r對可替換輸入對象調用repr()也是如此。只有在需要輸入(例如:float)特定格式參數(如%.5f)時,您需要其他格式說明符,如%f

format()方法:

"Hello {}".format(subs) 
"Hello {placeholder_name}".format(placeholder_name=subs) 

當然placeholder_name也可能是subs,我只是用一個不同的名稱,以澄清事情。下面將工作就像上面的解決方案:

"Hello {subs}".format(subs=subs) 

在Python中的位置參數也可以被傳遞給從列表或元組的函數調用,關鍵字參數也可以從一本字典,如果你想利用傳遞語言的更多動態功能:

my_tuple = ('world', '.') 
"Hello {}{}".format(*my_tuple) 
my_dict = {'subs': 'world', 'period': '.'} 
"Hello {subs}{period}".format(**my_dict) 

我們可以通過參數化的格式字符串複雜的事情,檢查出的format()方法的文檔的更多。

如果你有多種東西需要替換,那麼我強烈建議使用指定的佔位符(關鍵字參數爲format())而不是擺弄參數索引,因爲它通常會使代碼更容易閱讀。如果有多個東西需要替換,那麼它也可以減少錯誤的發生。

+0

@poke是的,我的信息是過時的。我更新我的答案。我很驚訝他們保持'%'格式。他們可能希望刪除它以使語言語法更清晰一些,但我同意使用'%'格式化somtimes會導致更簡單的格式字符串,並且很多開發人員更熟悉C樣式格式。 – pasztorpisti

+0

謝謝:)(順便說一下,我完全和你說'str.format'是格式化字符串的優越方式;我只想指出百分比格式化並不是一種不好的方法) – poke

0

您可以同時使用%和格式 - 他們不被棄用

subs = 'world' 

print ("hello %s" % subs) 
print ("hello {}".format(subs)) 
print ("hello {subs}".format(**locals())) 

享受

2

%運算符將工作,其語法很簡單:

>>> subs = 'world' 
>>> 'Hello %s' % subs 
'Hello world' 

字符串格式化新的語法允許額外的選項,繼承人片段從python文檔overviewing的基本途徑使用新海峽。format()方法:

>>> '{0}, {1}, {2}'.format('a', 'b', 'c') 
'a, b, c' 
>>> '{}, {}, {}'.format('a', 'b', 'c') # 2.7+ only 
'a, b, c' 
>>> '{2}, {1}, {0}'.format('a', 'b', 'c') 
'c, b, a' 
>>> '{2}, {1}, {0}'.format(*'abc')  # unpacking argument sequence 
'c, b, a' 
>>> '{0}{1}{0}'.format('abra', 'cad') # arguments' indices can be repeated 
'abracadabra' 

因此,使用新的語法,一個簡單的解決您的問題是:

>>> subs = 'world' 
>>> 'Hello {}'.format(subs) 
'Hello world' 
4

與其他人一樣已指出,有兩種方法可以做到字符串在Python格式化在這一刻。

Python 3.6將引入第三個選項。詳細信息可以在這裏找到:

PEP 0498 -- Literal String Interpolation

>>> name = 'Fred' 
>>> f'He said his name is {name!r}.' 
"He said his name is 'Fred'."