Python中嵌入变量的字符串

And*_*zco 0 python string variables string-formatting

也许有人已经问过这个,但我没有找到它,我想知道如何在Python中将变量嵌入到字符串中.我通常这样做:

print('Hi, my name is %s and my age is %d' %(name, age))
Run Code Online (Sandbox Code Playgroud)

但有时候会让人感到困惑,因为红宝石会像这样

puts('Hi, my name is #{name} and my age is #{age}')
Run Code Online (Sandbox Code Playgroud)

在Ruby中有没有像我这样的方法呢?

Mar*_*ers 6

从Python 3.6开始,您可以使用格式化字符串文字(也称为f-strings),它在{...}花括号内部使用任何有效的Python表达式,然后是可选的格式化指令:

print(f'Hi, my name is {name} and my age is {age:d}')
Run Code Online (Sandbox Code Playgroud)

这里nameage都是生成该名称值的简单表达式.

在Python 3.6之前的版本中,您可以使用str.format(),与之配对locals()globals():

print('Hi, my name is {name} and my age is {age}'.format(**locals()))
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,格式与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
Run Code Online (Sandbox Code Playgroud)

但请注意,显式优于隐式,您应该传入nameage作为参数:

print('Hi, my name is {name} and my age is {age}'.format(name=name, age=age)
Run Code Online (Sandbox Code Playgroud)

或使用位置参数:

print('Hi, my name is {} and my age is {}'.format(name, age))
Run Code Online (Sandbox Code Playgroud)