Python 在字符串连接过程中,如何仅在设置了变量的情况下添加分隔符?

Python 在字符串连接过程中,如何仅在设置了变量的情况下添加分隔符?,python,Python,如何仅在变量有值时添加分隔符,在下面的代码中,我试图避免使用2个下划线,如:foo\u bar\u\u baz,a、b、d将始终设置,只有c是可选的,是否有更类似python的方法 >>> a_must='foo' >>> b_must='bar' >>> c_optional='' >>> d_must='baz' >>> >>> f'{a_must}_{b_must}_{c_optio

如何仅在变量有值时添加分隔符,在下面的代码中,我试图避免使用2个下划线,如:
foo\u bar\u\u baz
,a、b、d将始终设置,只有c是可选的,是否有更类似python的方法

>>> a_must='foo'
>>> b_must='bar'
>>> c_optional=''
>>> d_must='baz'
>>>
>>> f'{a_must}_{b_must}_{c_optional}_{d_must}' if c_optional else 
f'{a_must}_{b_must}_{d_must}'
'foo_bar_baz'

在python3.6中,您可以在
f-string本身中写入条件:

f'{a_must}_{b_must}_{c_optional+"_" if c_optional else ""}{d_must}'
输出:

'foo_bar_baz'

您可以构建一个令牌列表,并使用
str.join
将该列表加入到一个字符串中,以
\uu
作为分隔符:

tokens = [a_must, b_must]
if c_optional:
     tokens.append(c_optional)
tokens.append(d_must)
print('_'.join(tokens))

为了更灵活一点,类似这样的方法会起作用:

variables = [a_must, b_must, c_optional, d_must]
'_'.join([x for x in variables if x])

您的解决方案运行良好,只需要一点格式设置。我添加了用于测试的打印语句

a_must='foo'
b_must='bar'
c_optional=''
d_must='baz'

if c_optional:
  result = f'{a_must}_{b_must}_{c_optional}_{d_must}'
else:
  result = f'{a_must}_{b_must}_{d_must}'

print(result)

如果其中一个必需的变量包含错误的值,这将不起作用。我不确定我是否理解您指出的内容。你能详细说明一下吗?我可能错过了一些明显的东西!我的意思是,例如,如果将
b_must
设置为空字符串,则输出将缺少
b_must
分隔符,即使它是必需的变量。但是,在重新阅读这个问题后,我意识到OP意味着像
b_必须
这样的变量将始终具有非空值,因此我的担心毕竟是无效的。