我如何破坏以下行? PEP8指南对我来说并不是很清楚。
confirmation_message = _('ORDER_CREATED: %(PROPERTY_1)s - %(PROPERTY_2)s - %(PROPERTY_3)s - %(PROPERTY_4)s') % {'PROPERTY_1': order.lorem, 'PROPERTY_2': order.ipsum, 'PROPERTY_4': order.dolor, 'PROPERTY_5': order.sit}
答案 0 :(得分:6)
通常会做类似的事情:
confirmation_message = _(
'ORDER_CREATED: %(PROPERTY_1)s - '
'%(PROPERTY_2)s - %(PROPERTY_3)s - %(PROPERTY_4)s') % {
'PROPERTY_1': order.lorem,
'PROPERTY_2': order.ipsum,
'PROPERTY_3': order.ipsum,
'PROPERTY_4': order.dolor,
'PROPERTY_5': order.sit
}
这利用了相邻字符串('like ' 'this'
)被连接起来以缩短长行文本的事实;其他一切都以逗号分隔。
答案 1 :(得分:6)
confirmation_message = (
_(
'ORDER_CREATED: %(PROPERTY_1)s - %(PROPERTY_2)s - '
'%(PROPERTY_3)s - %(PROPERTY_4)s'
) % {
'PROPERTY_1': order.lorem,
'PROPERTY_2': order.ipsum,
'PROPERTY_4': order.dolor,
'PROPERTY_5': order.sit,
})
或者:
confirmation_message_tmpl = _(
'ORDER_CREATED: %(PROPERTY_1)s - %(PROPERTY_2)s - '
'%(PROPERTY_3)s - %(PROPERTY_4)s'
)
confirmation_message = confirmation_message_tmpl % {
'PROPERTY_1': order.lorem,
'PROPERTY_2': order.ipsum,
'PROPERTY_4': order.dolor,
'PROPERTY_5': order.sit,
}
答案 2 :(得分:4)
使用字典 literal 作为%
的右手参数没什么意义。它占用了大量空间而没有真正增强代码的可读性。
confirmation_message = _('ORDER_CREATED: %s - %s - %s - %s') % (
order.lorem,
order.ipsum,
order.dolor,
order.sit
)
operator.attrgetter
功能在这里很有用:
import operator
attrs = operator.attrgetter('lorem', 'ipsum', 'dolor', 'sit')
confirmation_message = _('ORDER_CREATED: %s - %s - %s - %s') % attrs(order)
如果可以,请切换到使用format
方法:
msg_template = 'ORDER_CREATED: {0.lorem} - {0.ipsum} - {0.dolor} - {0.sit}'
confirmation_message = _(msg_template).format(order)
答案 3 :(得分:2)
您可能最常使用的方法是使用implicit line joining,类似于:
confirmation_message = (_('ORDER_CREATED: %(PROPERTY_1)s - %(PROPERTY_2)s - '
'%(PROPERTY_3)s - %(PROPERTY_4)s') %
{'PROPERTY_1': order.lorem, 'PROPERTY_2': order.ipsum,
'PROPERTY_4': order.dolor, 'PROPERTY_5': order.sit})
可以拆分括号,方括号或花括号中的表达式 不使用反斜杠的多个物理行。
使用\
字符显式连接的问题是\
之后物理行末尾的额外字符(如空格)会导致错误,如下所示:
>>> c = '1 2 3 4 5 6 ' \ # This will generate an error.
File "<stdin>", line 1
c = '1 2 3 4 5 6 ' \ # This will generate an error.
^
SyntaxError: unexpected character after line continuation character
>>>
隐式加入不会发生这种情况:
>>> c = ('1 2 3 4 5 6 ' # No error.
... '7 8 9 10')
>>> print(c)
1 2 3 4 5 6 7 8 9 10
>>>