我正在开发一个应用程序,在其中执行一些请求以获取对象ID。在它们每个之后,我调用一个方法(get_actor_info()
)将此id作为参数传递(请参见下面的代码)。
ACTOR_CACHE_KEY_PREFIX = 'actor_'
def get_actor_info(actor_id):
cache_key = ACTOR_CACHE_KEY_PREFIX + str(actor_id)
可以注意到,我正在将其转换actor_id
为string
前缀并将其与前缀连接。但是,我知道我能做到这一点的多种其他方式(.format()
或者'%s%d'
,例如),并在我的问题的结果:将'%s%d'
超过字符串连接更好的可读性,代码约定和效率方面?
谢谢
这很容易成为基于意见的主题,但是我发现格式在大多数情况下更具可读性,并且更易于维护。可视化最终字符串的外观会更容易,而无需执行“心理串联”。例如,以下哪个更易读?
errorString = "Exception occurred ({}) while executing '{}': {}".format(
e.__class__.__name__, task.name, str(e)
)
要么:
errorString = "Exception occurred (" + e.__class__.__name__
+ ") while executing '" + task.name + "': " + str(e)
至于是否使用%
或者.format()
,我可以回答更客观:使用.format()
。%
是“旧样式”,并且根据Python文档,它们可能很快会被删除:
由于
str.format()
是相当新的东西,因此许多Python代码仍然使用%
运算符。但是,由于最终会从该语言中删除这种旧的格式设置样式,str.format()
因此通常应使用。
文档的更高版本已不再提及,但这仍然.format()
是未来的方式。用它!
串联速度更快,但这不必担心。首先,使您的代码具有可读性和可维护性,然后优化以后需要优化的部分。过早的优化是万恶之源;)
问题内容: 我看到许多人使用这样的格式字符串: 而不是像这样简单地串联字符串: 格式字符串是否具有更好的性能,还是仅用于外观? 问题答案: 这只是为了外观。您可以一眼看出格式是什么。我们中的许多人都比微优化更喜欢可读性。 让我们看看IPython的意思:
主要内容:指定最小输出宽度,指定对齐方式,指定小数精度我们在《 第一个Python程序——在屏幕上输出文本》中讲到过 print() 函数的用法,这只是最简单最初级的形式,print() 还有很多高级的玩法,比如格式化输出,这就是本节要讲解的内容。 熟悉C语言 printf() 函数的读者能够轻而易举学会 Python print() 函数,它们是非常类似的。 print() 函数使用以 开头的转换说明符对各种类型的数据进行格式化输出,具体请看下表。
问题内容: 我想知道使用模板字符串而不是新的高级字符串格式是否有优势? 问题答案: 模板要比通常的字符串格式更简单,但会降低表达力。PEP 292 的基本原理将模板与Python的-style字符串格式进行了比较: Python当前支持基于C的‘%’格式字符的字符串替换语法。尽管格式非常丰富,但即使对于有经验的Python程序员,%格式的代码也容易出错。一个常见的错误是忽略了尾随的格式字符,例如i
问题内容: Python 2.6引入的方法与现有%运算符的语法略有不同。哪个更好,什么情况下适合? 以下使用每种方法并具有相同的结果,那么有什么区别? 此外,何时在Python中进行字符串格式化?例如,如果我的日志记录级别设置为,那么执行以下操作是否还会对我有所帮助?如果是这样,有办法避免这种情况吗? 问题答案: 第一个问题在许多方面似乎都更加复杂。一个令人烦恼的事情是它如何可以接受变量或元组。你
问题内容: 我正在尝试找到格式化sql查询字符串的最佳方法。在调试应用程序时,我想记录所有sql查询字符串的文件,并且正确格式化字符串很重要。 选项1 这对于打印sql字符串很有用。 如果字符串太长且不适合80个字符的标准宽度,则不是一个好的解决方案。 选项2 这里的代码很清楚,但是当您打印sql查询字符串时,会得到所有这些烦人的空格。 的u ‘\ n选取FIELD1,FIELD2,字段3,字段4
问题内容: 在Python中,什么时候以及什么时候使用字符串连接与字符串替换比较容易。由于字符串连接的性能有了很大的提高,这(成为更多)是一种风格上的决定,而不是一种实际的决定吗? 举一个具体的例子,如何处理灵活的URI: 编辑:也有关于加入字符串列表和使用命名替换的建议。这些是中心主题的变体,即在什么时候做正确的方法?感谢您的回复! 问题答案: 根据我的机器,连接的速度(明显)更快。但是从风格上