Python 当我从外部传递值时,它只接受默认值。如何调试此问题

Python 当我从外部传递值时,它只接受默认值。如何调试此问题,python,python-2.7,Python,Python 2.7,默认情况下,b和c值应为0。当我传递一些参数时,它应该被接受,但当我传递参数时,只有默认值被接受。为什么不采用我传递的参数 守则: import sys def add(a, b, c): d = int(a) + int(b) + int(c) print "add: " + str(d) def main(): a = sys.argv[1] b = sys.argv[2] c = sys.argv[3] ret = add(a, b=0, c=0)

默认情况下,b和c值应为0。当我传递一些参数时,它应该被接受,但当我传递参数时,只有默认值被接受。为什么不采用我传递的参数

守则:

import sys

def add(a, b, c):
   d = int(a) + int(b) + int(c)
   print "add: " + str(d)

def main():
   a = sys.argv[1]
   b = sys.argv[2]
   c = sys.argv[3]
   ret = add(a, b=0, c=0)

if __name__ == '__main__':
   main()
应该是,

import sys

def add(a, b=0, c=0):
   d = int(a) + int(b) + int(c)
   print "add: " + str(d)

def main():
   a = sys.argv[1]
   b = sys.argv[2]
   c = sys.argv[3]
   ret = add(a, b=5, c=6)

if __name__ == '__main__':
   main()

如果要从sys.argv
获取值,如果未设置,则默认为零,可以尝试以下操作:

a = sys.argv[1] if len(sys.argv) > 1 else 0
b = sys.argv[2] if len(sys.argv) > 2 else 0
c = sys.argv[3] if len(sys.argv) > 3 else 0
ret = add(a, b, c)

main中引用的值b和c与add()的输入中的值不同

将此视为一种澄清传递哪些值的方法

def main():
   x = sys.argv[1]
   y = sys.argv[2]
   z = sys.argv[3]
   ret = add(x, b=y, c=z)
您可以设置
b=sys.argv[2]
,然后调用
add(a,b=b,c)
以保持相同的名称

关于如何设置在未指定值时使用的默认值,最好在函数中设置默认值。在
中,在您的案例中添加

import sys

def add(a, b=0, c=0): # default b and c to 0 but a is not set with default
   d = int(a) + int(b) + int(c)
   print "add: " + str(d)
   return d # return value otherwise you return None

def main():
   a = sys.argv[1]
   b = sys.argv[2]
   c = sys.argv[3]
   # store d from add() to ret variable.
   ret = add(a, b, c)

if __name__ == '__main__':
   main()

什么是
x
y
?这些名称没有定义。x和y是您想要传递的数字。更新了同样的内容。