【问题标题】:How to define a python string (quasi-)constant that has dynamic inputs?如何定义具有动态输入的python字符串(准)常量?
【发布时间】:2011-11-10 07:43:13
【问题描述】:

例如:

MY_MESSAGE = 'Dear %s, hello.'
# ...
name = "jj"
print MY_MESSAGE % name

python 有没有完成我上面的代码这样的功能?

【问题讨论】:

标签: python string constants


【解决方案1】:

是的,你写它的确切方式。你的代码很好。

【讨论】:

  • 我会删除这个坏女孩,但最好给我留下一个耻辱的印记!感谢您的快速回复:)
  • @dolan,我很佩服你留下你的污点。 :) 睡一觉吧!
【解决方案2】:

Python 并不真正拥有与 C 中相同的“常量”概念。所以你所拥有的是一个相当不错的方法。

我实际上会争辩说,这是“我们都是同意的成年人”的一个例子并不能很好地支持。认为该语言很棒,但时不时地保持不变会......很好。

【讨论】:

  • Ruby 的做法非常棒:如果您重新定义以大写字母开头的 any 变量,则会引发警告。
【解决方案3】:

您的代码是正确的,但我相信有一种更可取的方式来做到这一点:

>>> my_message = 'Dear {:s}, hello.'
>>> my_message.format('jj')
'Dear jj, hello.'

首选,因为将来可能会用 .format() 方法替换 % 运算符。

正如 Mark Lutz 的 Learning Python 中所述。第四版format方法:

  • 有一些% 表达式中没有的功能,
  • 可以使替换值更明确,
  • 用操作符换取可以说更容易记忆的方法名称,
  • 不支持单个和多个的不同语法 替代值案例,

后来,在同一本书中:

... Python 开发人员将来可能会弃用% 表达式以支持format 方法。事实上,在 Python 3.0 的手册中有关于这种效果的注释。

【讨论】:

  • .format() 肯定有它的位置,但 % 不会被弃用——有太多人仍在使用它,并将继续使用它。
  • @Ethan Furman:可能你是对的,但是% 有很多缺点,并且已经创建了.format() 来替代它(至少看起来像,当你查看PEP 3101 时)。
【解决方案4】:

字符串格式化操作符:% 也可以做其他的事情:

STRING = "This is %(foo)s, and this is also %(foo)s"
print STRING % {"foo": "BAR"}

# => This is BAR, and this is also BAR

如果您要重复一个论点,这非常有用。肯定会跳动

FORMAT_STRING % ("BAR", "BAR")

您还可以进行填充和数字格式化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多