我经常编写以下代码:
print('object', 'moved', 'from =', object.location, 'dest =', new_location)
print('object', 'created', 'at =', object.location, 'status =', status)诸若此类。
我计划用一个函数log替换所有这些
def log(self, action, **details):
print('object', action, end = '')
for var, value in state.items():
print(var, '=', value, end = '')
print()这几乎是可行的--除了两个问题。首先,我无法控制输出的顺序,这对我来说很重要。当然,details只是一个字典,因此参数的顺序丢失了。第二,我不能使用任何语言关键字,例如,from作为关键字参数的名称。
有什么解决办法可以避免不必要的冗长,但不受这些问题的影响?
我想使用log函数的原因是,我可能希望禁用/启用它,或者在一个位置上更改格式。
发布于 2011-02-04 01:33:39
我能想到的最干净的解决方案是传递一个键/值对的元组。
def log(action, *details):
print('object', action, end = '')
for var, value in details:
print(var, '=', value, end = '')
print()
log("moved", ("from", obj.location), ("dest", new_location))您可以编写一个函数来捕获格式字符串并返回执行实际日志记录的另一个函数。如果您要频繁使用单一格式,这可能是有用的。
def makelogger(*format):
def logger(action, *args):
print("object", action, format % args)
return logger
logger = makelogger("from = %s dest = %s")
logger("moved", obj.location, new_location)
# do a one-off
makelogger("from = %s dest = %s")("moved", obj.location, new_location)只是一些想法。
https://stackoverflow.com/questions/4893575
复制相似问题