最近,我发现''.format
功能非常有用,因为它可以提高可读性,很多比较的%
格式。 努力实现简单的字符串格式化:
data = {'year':2012, 'month':'april', 'location': 'q2dm1'}
year = 2012
month = 'april'
location = 'q2dm1'
a = "year: {year}, month: {month}, location: {location}"
print a.format(data)
print a.format(year=year, month=month, location=location)
print a.format(year, month, location)
虽然两个第一印做格式如我所料(是的, something=something
长相丑陋,但是这只是一个例子),最后一个将提高KeyError: 'year'
。 是否有蟒蛇任何伎俩来创建字典,以便它会自动填入键和值,例如somefunc(year, month, location)
将输出{'year':year, 'month': month, 'location': location}
?
我是很新,Python和找不到关于这个主题的信息,但是像这样的伎俩将提高,并大幅缩小我当前的代码。
在此先感谢和原谅我的英语水平。
第一次print
应
print a.format(**data)
此外,如果你正在寻找一些捷径,你可以写一个像,没什么大的区别。
def trans(year, month, location):
return dict(year=year, month=month, location=location)
data = {'year':2012, 'month':'april', 'location': 'q2dm1'}
a = "year: {year}, month: {month}, location: {location}"
print a.format(**data)
..是你在找什么。 它的功能上等同于做.format(year=data['year'], ...)
或者你给的其它例子。
双星号的事情是寻找一个很难的事情,所以它通常被称为“kwargs”。 这里有一个关于这个语法很好,所以问题
您可以使用dict()
调用的:
dict(year=yeah, month=month, location=location)
当传递关键字参数就创建了一个包含您指定为kwargs元素的字典。
如果你不想指定参数名,使用的定位风格.format()
>>> a = 'year {0} month {1} location {2}'
>>> print a.format(2012, 'april', 'abcd')
year 2012 month april location abcd
但是,如果你尝试做类似的事如何compact()
在PHP中不(创建一个字典映射变量名到它的价值,而无需单独指定名称和变量),请不要。 它只是导致丑陋不可读代码反正就需要讨厌的黑客。
你可以通过locals()
a.format(**locals())
当然,这有问题:你将不得不在当地人通过一切,它可以是很难理解重命名或删除变量的影响。
更好的办法是:
a.format(**{k:v for k,v in locals() if k in ('year', 'month')})
# or; note that if you move the lambda expression elsewhere, you will get a different result
a.format(**(lambda ld = locals(): {k:ld[k] for k in ('year', 'month')})())
但是,这不是任何更简洁,除非你有一个功能(必须的课程采取的字典参数)包起来。
作为Python的3.6 ,你也可以使用新的格式化字符串(F-字符串) ,你可以通过使用变量使用:
year = 2012
month = 'april'
location = 'q2dm1'
a = f"year: {year}, month: {month}, location: {location}"
print(a)
或词典 :
data = {'year': 2012, 'month': 'april', 'location': 'q2dm1'}
a = f"year: {data['year']}, month: {data['month']}, location: {data['location']}"
print(a)
注意f
字符串文字之前的前缀。
PEP 498:格式化字符串文字 :
格式化字符串文字的前缀为“f”和类似()由str.format接受格式字符串。 它们包含在花括号替换字段。 替换字段是表达式,其在运行时计算,然后使用格式()协议格式化的:
>>> >>> name = "Fred" >>> f"He said his name is {name}." 'He said his name is Fred.' >>> width = 10 >>> precision = 4 >>> value = decimal.Decimal("12.34567") >>> f"result: {value:{width}.{precision}}" # nested fields 'result: 12.35'
...