【问题标题】:Python: Assign multiple values at once: pass all argv arguments to a functionPython:一次分配多个值:将所有 argv 参数传递给函数
【发布时间】:2011-11-04 12:29:30
【问题描述】:

我想将所有 argv 参数传递给一个函数。我已经创建了这段代码,但它给了我一个错误。怎么知道如何使这项工作?非常感谢您的帮助。

if __name__ == "__main__":
    import sys
    createP(sys.argv[1:])

def createP( a, b, c):
    print a + b + c

我正在使用命令行运行这个应用程序:

python filename.py d e f

返回:

NameError: name 'createP' is not defined

【问题讨论】:

  • 如果在 if 语句之前定义函数会发生什么?

标签: python arguments tuples argv


【解决方案1】:

您在定义之前调用createP。您还向它传递了错误数量的参数;你需要扩展数组:

def createP( a, b, c):
    print a + b + c

if __name__ == "__main__":
    import sys
    createP(*sys.argv[1:])

【讨论】:

    【解决方案2】:

    尝试在定义和if之间切换顺序。

    【讨论】:

    • 是的。该函数需要先定义,然后我才能调用它。谢谢!
    【解决方案3】:

    如前所述,您必须颠倒顺序。
    要显示可变长度的 argv,您应该编写:

    def createP(*x):
        print '\n'.join(x)
        # or ' '.join(x) if you prefer
    
    if __name__ == "__main__":
        import sys
        createP(*sys.argv[1:])
    

    我认为 sys.argv 的所有元素都是字符串。我说的对吗?

    更新

    好吧,我的回答有点愚蠢;为什么下面的代码(没有 * 用于传递参数和定义参数)不方便? :

    def createP(x):
        print '\n'.join(x)
        # or ' '.join(x) if you prefer
    
    if __name__ == "__main__":
        import sys
        createP(sys.argv[1:])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 2012-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多