在函数参数中列出理解

boo*_*kum 6 python list-comprehension list keyword-argument

在Python 2.7.1中,我试图提供一个消息列表作为第一个参数,并将颜色列表作为第二个参数.我希望第二个参数默认为白色列表,如果没有提供的话.这是我试图这样做的方式:

def multicolor_message(msgs, colors=[libtcod.white for x in len(msgs)]):
#function body
Run Code Online (Sandbox Code Playgroud)

libtcod.white是我正在使用的库的一部分,并且不会导致任何问题.编译器说msgs没有定义变量.显然该msgs变量在此范围内不存在,但我需要创建一个适当长度的列表并将其分配给colors.最干净的方法是什么?

pio*_*kuc 6

我会这样做:

def multicolor_message(msgs, colors=None):
  if colors is None:
    colors=[libtcod.white for x in len(msgs)]
Run Code Online (Sandbox Code Playgroud)

  • 这样做的原因是你不能在默认值中引用同一函数的其他参数.默认值在函数的定义范围内计算,参数本身仅在调用函数时存在. (4认同)
  • 另一个重要原因是[可变默认参数](http://stackoverflow.com/q/1132941/395760)很少做你想要的. (2认同)