【问题标题】:Conditional string formatting with if, elif使用 if、elif 进行条件字符串格式化
【发布时间】:2019-03-20 08:00:38
【问题描述】:

How to implement conditional string formatting?更进一步

基本上:是否可以在格式字符串中添加ifelif....else

l = ['it', 'en', 'es']

for i in l:
    print('{tit}'.format(tit='Ciao' if i == 'it' elif i == 'en' tit='Hi' else 'Hola'))

【问题讨论】:

  • 这会更有意义{'it': 'Ciao', 'en': ...}。虽然可以使用内联 if 表达式,您甚至可以将其链接以模拟 elif 之类的东西,但这是一个无法维护的疯狂结构。
  • 我的一般工作流程要像你建议的那样拥有一本字典更复杂。为什么疯了?
  • 如果您的工作流程如此复杂,为什么要在一行中完成所有工作?
  • 看看它,它是不可读的(实际工作的等价物也好不了多少)。此外,每次您可以向l 添加一个项目时,您需要在代码中使用此类内容的任何地方继续添加该已经不可读的表达式。这就是为什么最好先定义一个像dict这样的东西,其中一起定义的数据一起定义,其余的是一个通用算法,不需要硬编码到if i == 'it' …。即使您的实际情况更复杂,肯定有遵循这种更好模式的解决方案。
  • 好的,那么我将重构代码。感谢您的建议

标签: python string format


【解决方案1】:

问题的作者询问是否可以在字符串格式中添加 if、elif、else。因此,我确实假设作者想根据某些条件更改字符串的值,但出于某些原因想使用 if、elif 和 else。

这是我的答案:

t = ['Ciao' if x == 'it' else ('Hi' if x == 'en' else 'Hola') for x in ['it', 'en', 'es']]

我个人不喜欢这种情况下的 if、elif、else 逻辑。

【讨论】:

    【解决方案2】:

    虽然我不推荐它 - 回答这个问题:

    不能在格式字符串中使用elif

    但是可以使用嵌套的条件表达式:

    l = ['it', 'en', 'es']
    
    for i in l:
        print('{tit}'.format(tit=('Ciao' if i == 'it' else 'Hi' if i == 'en' else 'Hola')))
    

    输出:

    Ciao
    Hi
    Hola
    

    https://docs.python.org/3/reference/expressions.html#conditional-expressions

    【讨论】:

      猜你喜欢
      • 2013-01-13
      • 1970-01-01
      • 2020-06-11
      • 1970-01-01
      • 2016-03-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-19
      • 2018-03-10
      相关资源
      最近更新 更多