我試圖做這樣的事情:Python 3中的字符串替換?
subs = 'world'
"Hello {[subs]}"
在Python 3
我不能完全弄清楚的語法(是否來自紅寶石/ PHP)。我錯過了什麼嗎?文檔中的%操作符我認爲是不推薦使用的Python 2.x。
我試圖做這樣的事情:Python 3中的字符串替換?
subs = 'world'
"Hello {[subs]}"
在Python 3
我不能完全弄清楚的語法(是否來自紅寶石/ PHP)。我錯過了什麼嗎?文檔中的%操作符我認爲是不推薦使用的Python 2.x。
您有格式兩種選擇:老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()
)而不是擺弄參數索引,因爲它通常會使代碼更容易閱讀。如果有多個東西需要替換,那麼它也可以減少錯誤的發生。
@poke是的,我的信息是過時的。我更新我的答案。我很驚訝他們保持'%'格式。他們可能希望刪除它以使語言語法更清晰一些,但我同意使用'%'格式化somtimes會導致更簡單的格式字符串,並且很多開發人員更熟悉C樣式格式。 – pasztorpisti
謝謝:)(順便說一下,我完全和你說'str.format'是格式化字符串的優越方式;我只想指出百分比格式化並不是一種不好的方法) – poke
您可以同時使用%和格式 - 他們不被棄用
subs = 'world'
print ("hello %s" % subs)
print ("hello {}".format(subs))
print ("hello {subs}".format(**locals()))
享受
%運算符將工作,其語法很簡單:
>>> 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'
與其他人一樣已指出,有兩種方法可以做到字符串在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'."
'潛艇=「world''' 「你好{}」 格式(潛艇)' – jDo