【问题标题】:Purpose of star operator when used on List [duplicate]星号运算符在列表上使用时的目的[重复]
【发布时间】:2011-12-26 00:14:35
【问题描述】:

在本例中,星号运算符对输入参数列表做了什么?

def main(name, data_dir='.'):
    print 'name', type(name)

if __name__ == '__main__':
    main(*sys.argv)

具体来说,如果我使用它打印的星号运算符运行程序:

name <type 'str'>

如果在没有星号 main(sys.argv) 的情况下运行它会打印:

name <type 'list'>

【问题讨论】:

    标签: python


    【解决方案1】:

    * 运算符 unpacks an argument list。它允许您使用列表项作为单独的参数来调用函数。

    例如,如果sys.argv["./foo", "bar", "quux"],则main(*sys.argv) 等价于main("./foo", "bar", "quux")

    【讨论】:

      【解决方案2】:
      main(*sys.argv)
      

      使用列表sys.argv 的内容作为main 方法的相应参数调用main,在这种情况下等效于:

      main(sys.argv[0])
      

      main(sys.argv[0], sys.argv[1])
      

      取决于sys.argv的长度。

      因此,如果您使用星号调用它,它会将列表的第一个元素 sys.argv 传递给 name

      如果您在不带星号的情况下调用它,它将传递给name 整个列表sys.argv

      【讨论】:

      • 但是@Frédéric Hamidi 显示了整个列表而不是第一个参数。为什么不只是 main("./foo") 而不是 main("./foo", "bar", "quux")?
      猜你喜欢
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 2013-05-27
      • 1970-01-01
      • 2012-10-30
      • 2013-04-18
      相关资源
      最近更新 更多