【发布时间】:2020-11-08 09:53:37
【问题描述】:
设置是:我有一个 dict (format_dict),并且在那个 dict 中有 lambda 函数。如果我想正常读取字典,它不会像这样工作:
dict = {
'name_U': (lambda: name.upper()),
'name_L': (lambda: name.lower()),
'name_fL': (lambda: name[0])
}
name = 'John'
print(dict['name_U'])
因为它返回:
<function <lambda> at 0x00000000E1F45012>
但如果我改为使用print(dict['name_U']()),它会按预期工作(打印JOHN)。
当我想使用这个字典来格式化一个字符串时,问题就来了。如果是这样:
print('My name in uppercase is {name_U}. The first letter is {name_fL}.'.format(**dict))
返回
My name in uppercase is <function <lambda> at 0x00000000E1F45012>. The first letter is <function <lambda> at 0x00000000E1F46123>.
(我希望输出为My name in uppercase is JOHN. The first letter is J.)
如果我尝试在“正常”情况下 (...format(**dict()))) 执行的操作,它会返回错误,提示 TypeError: 'dict' object is not callable。有什么办法可以规避吗?
附带说明:我不能将字典用作
dict = {
'name_U': name.upper(),
'name_L': name.lower(),
'name_fL': name[0]
}
因为这样 dict 的值在赋值后将是相同的,即使 name 改变了值。
【问题讨论】:
-
print(f'my name in uppercase is {dict["name_U"]()}. The first letter is {dict["name_fL"]()}') --> my name in uppercase is JOHN. The first letter is J
标签: python-3.x dictionary lambda