首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python 3:日志函数签名问题

python 3:日志函数签名问题
EN

Stack Overflow用户
提问于 2011-02-04 01:10:44
回答 1查看 446关注 0票数 1

我经常编写以下代码:

代码语言:javascript
复制
print('object', 'moved', 'from =', object.location, 'dest =', new_location)
print('object', 'created', 'at =', object.location, 'status =', status)

诸若此类。

我计划用一个函数log替换所有这些

代码语言:javascript
复制
def log(self, action, **details):
  print('object', action, end = '')
    for var, value in state.items():
      print(var, '=', value, end = '')
    print()

这几乎是可行的--除了两个问题。首先,我无法控制输出的顺序,这对我来说很重要。当然,details只是一个字典,因此参数的顺序丢失了。第二,我不能使用任何语言关键字,例如,from作为关键字参数的名称。

有什么解决办法可以避免不必要的冗长,但不受这些问题的影响?

我想使用log函数的原因是,我可能希望禁用/启用它,或者在一个位置上更改格式。

EN

回答 1

Stack Overflow用户

发布于 2011-02-04 01:33:39

我能想到的最干净的解决方案是传递一个键/值对的元组。

代码语言:javascript
复制
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))

您可以编写一个函数来捕获格式字符串并返回执行实际日志记录的另一个函数。如果您要频繁使用单一格式,这可能是有用的。

代码语言:javascript
复制
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)

只是一些想法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4893575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档