不用f前缀但是像fstring一样Print (fstring print without f-prefix)

Python 早期的Print语句受到 C 的直接影响,在把变量嵌入到输出的字符串时采用了占位符语法。使用这种打印语句,程序员需要在脑子里把所有的变量处理两次,一次是它们在字符串中的位置,一次是它们的具体名称。这样处理实际上比较繁琐而且容易出错的:

name = 'Bob'
age = '60'
print('%s is % years old.' % (name, age))

新的f-string 语法可以直接把变量嵌入到字符串中,算是朝正确的方向前进了一大步:

print(f'{name} is {age} years old.')

现在的问题是,我们总是要加上 f 这个恼人的前缀,特别是如果输出的消息是多行的话,每一行都要写上这个前缀,更是麻烦。我琢磨了很久,终于搞明白怎样在正常的字符串中嵌入变量名处理了,真是不错:

def Print(message):
  import inspect
  frame = inspect.stack()[1][0]
  print(message.format_map({**frame.f_globals, **frame.f_locals}))

name = 'Bob'
age = '60'
Print('{name} is {age} years old. - Print magic')

长久以来的一个心病终于解决了。