也許有人已經問過這個,但是我沒有找到它,我想知道如何在Python中將變量嵌入到字符串中。我通常不喜歡這樣寫道:Python中嵌入變量的字符串
print('Hi, my name is %s and my age is %d' %(name, age))
但有時是混亂與紅寶石它會是這樣
puts('Hi, my name is #{name} and my age is #{age}')
有沒有辦法在Python不喜歡我給它的紅寶石?
也許有人已經問過這個,但是我沒有找到它,我想知道如何在Python中將變量嵌入到字符串中。我通常不喜歡這樣寫道:Python中嵌入變量的字符串
print('Hi, my name is %s and my age is %d' %(name, age))
但有時是混亂與紅寶石它會是這樣
puts('Hi, my name is #{name} and my age is #{age}')
有沒有辦法在Python不喜歡我給它的紅寶石?
通過Python 3.6起,您可以使用Formatting string literal(又名F-串),它裏面{...}
大括號任何有效的Python表達式,其次是可選的格式化指令:
print(f'Hi, my name is {name} and my age is {age:d}')
這裏name
和age
都是產生該名稱值的簡單表達式。
在前面的Python 3.6版本中,你可以使用str.format()
,無論使用哪種locals()
或globals()
配對:
print('Hi, my name is {name} and my age is {age}'.format(**locals()))
正如你所看到的格式是相當接近Ruby的。 locals()
和globals()
方法將名稱空間作爲字典返回,並且**
關鍵字參數啓動語法使str.format()
調用可以訪問給定名稱空間中的所有名稱。
演示:
>>> name = 'Martijn'
>>> age = 40
>>> print('Hi, my name is {name} and my age is {age}'.format(**locals()))
Hi, my name is Martijn and my age is 40
然而要注意的顯式勝於隱,你應該在name
和age
真正作爲參數傳遞:
print('Hi, my name is {name} and my age is {age}'.format(name=name, age=age)
或使用位置參數:
print('Hi, my name is {} and my age is {}'.format(name, age))
str.format
是新的方式要做到這一點,但是這也適用:
print('Hi, my name is %(name)s and my age is %(age)d' % {
'name': name,
'age': age,
})
這實在是與此相同,如果已經存在的變量:
print('Hi, my name is %(name)s and my age is %(age)d' % locals())
您還可以使用:
dicta = {'hehe' : 'hihi', 'haha': 'foo'}
print 'Yo %(hehe)s %(haha)s' % dicta
的對格式字符串完全使用Ruby語法的替代方式:
import string
class RubyTemplate(string.Template):
delimiter = '#'
用作:
>>> t = RubyTemplate('Hi, my name is #{name} and my age is #{age}')
>>> name = 'John Doe'
>>> age = 42
>>> t.substitute(**locals())
'Hi, my name is John Doe and my age is 42'
然後,您可以創建一個函數,如:
def print_template(template, vars):
print(RubyTemplate(template).substitute(**vars))
而且使用它作爲:
>>> print_template('Hi, my name is #{name} and my age is #{age}', locals())
Hi, my name is John Doe and my age is 42
在一個側面說明:即使Python的%
允許這種插值:
>>> 'Hi, my name is %(name)s and my age is %(age)d' % locals()
'Hi, my name is John Doe and my age is 42'
其實這看起來更復雜,我正在尋找一些簡單的東西。 –
@AndresOrozco我從來沒有說過這個更簡單,我只是想提供一個與ruby的「模板語法」相匹配的替代方案。 – Bakuriu
是的,但我想要一些簡單的東西,比如Ruby。 –