【问题标题】:Preferred way to format a dictionary being passed to a function?格式化传递给函数的字典的首选方法?
【发布时间】:2012-12-20 12:19:45
【问题描述】:

我将如何格式化:

self.bot = servo.Robot({
        'waist': servo.Servo(3, 90, .02, 0),
        'shoulder': servo.Servo(4, 130, .03, 15),
        'elbow': servo.Servo(5, 110, .02, 19),
        'wrist': servo.Servo(6, 20, .01, 9),
        'claw': servo.Servo(7, 40, .01, 0)
    }, [5, 15, 25])

如果说的太多,创建一个变量self.bot,使其等于self.Robot(servo_dict, num_list)的返回值,它接受一个dict和一个list作为参数。

我已经查看了 PEP8this 其他 Stack Overflow 问题。我会鼓励答案链接到样式指南...

【问题讨论】:

标签: python formatting format


【解决方案1】:

使用dict 构造函数,您至少可以避免输入一堆引号:

self.bot = servo.Robot(dict(
        waist = servo.Servo(3, 90, .02, 0),
        shoulder = servo.Servo(4, 130, .03, 15),
        elbow = servo.Servo(5, 110, .02, 19),
        wrist = servo.Servo(6, 20, .01, 9),
        claw = servo.Servo(7, 40, .01, 0)
    ), [5, 15, 25])

当然,你也可以这样写辅助函数:

def servos(**kwargs):
    for k, v in kwargs.iteritems():
        kwargs[k] = servo.Servo(*v)
    return kwargs

然后:

self.bot = servo.Robot(servos(
        waist = (3, 90, .02, 0),
        shoulder = (4, 130, .03, 15),
        elbow = (5, 110, .02, 19),
        wrist = (6, 20, .01, 9),
        claw = (7, 40, .01, 0)
    ), [5, 15, 25])

如果您将使用不同类型的实例执行大量 dicts-of-instances,则可以将帮助程序设为通用:

def instance_dict(typ, **kwargs):
    for k, v in kwargs.iteritems():
        kwargs[k] = typ(*v)
    return kwargs

# later...
self.bot = servo.Robot(
               instance_dict(servo.Servo,
                   waist = (3, 90, .02, 0),
                   shoulder = (4, 130, .03, 15),
                   elbow = (5, 110, .02, 19),
                   wrist = (6, 20, .01, 9),
                   claw = (7, 40, .01, 0) ),
               [5, 15, 25])

【讨论】:

  • servos = lambda **kwargs: map(lambda kv: (kv[0], servo.Servo(*kv[1])), kwargs.items()(只是因为我们可以)
  • “当用于指示关键字参数或默认参数值时,不要在 = 符号周围使用空格”- PEP 8.
  • “有时风格指南并不适用。如有疑问,请使用您的最佳判断”- PEP 8。:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-19
  • 2013-12-14
  • 1970-01-01
  • 2015-10-25
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
相关资源
最近更新 更多