Python的“.format”功能(python's “.format” function

2019-07-28 23:52发布

最近,我发现''.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和找不到关于这个主题的信息,但是像这样的伎俩将提高,并大幅缩小我当前的代码。

在此先感谢和原谅我的英语水平。

Answer 1:

第一次print

print a.format(**data)

此外,如果你正在寻找一些捷径,你可以写一个像,没什么大的区别。

def trans(year, month, location):
    return dict(year=year, month=month, location=location)


Answer 2:

data = {'year':2012, 'month':'april', 'location': 'q2dm1'}
a = "year: {year}, month: {month}, location: {location}"

print a.format(**data)

..是你在找什么。 它的功能上等同于做.format(year=data['year'], ...)或者你给的其它例子。

双星号的事情是寻找一个很难的事情,所以它通常被称为“kwargs”。 这里有一个关于这个语法很好,所以问题



Answer 3:

您可以使用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中不(创建一个字典映射变量名到它的价值,而无需单独指定名称和变量),请不要。 它只是导致丑陋不可读代码反正就需要讨厌的黑客。



Answer 4:

你可以通过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')})())

但是,这不是任何更简洁,除非你有一个功能(必须的课程采取的字典参数)包起来。



Answer 5:

作为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' 

...



文章来源: python's “.format” function