def myF4(*args):
def myF5():
sum = 0
for i in args:
sum = sum + i
return sum
return myF5
a = [1,2,3,4,5]
b = myF4(a)
print(b())
加粗的代码段,我修改为显示type时,类型是list的,pycharm运行时,也无法运行。
但单独进行列表循环时又可以运行。
def myF4(*args):
def myF5():
sum = 0
for i in args:
sum = sum + i
return sum
return myF5
a = [1,2,3,4,5]
b = myF4(a)
print(b())
加粗的代码段,我修改为显示type时,类型是list的,pycharm运行时,也无法运行。
但单独进行列表循环时又可以运行。
你这个函数本身是没有问题的,问题出在你传递参数的时候。
def myF4(*args):
def myF5():
sum = 0
for i in args:
sum = sum + i
return sum
return myF5
如果你用如下的形式调用,则不会出现问题:
b = myF4(1,2,3,4,5)
print(b())
或者如下的形式也是没有问题的:
a = [1,2,3,4,5]
b = myF4(*a)
print(b())
但是如果你直接将a
传递进去:
a = [1,2,3,4,5]
b = myF4(a) # wrong
print(b())
那就表明args
这个元组中只包含一个元素,而这个元素是一个包含五个数字的列表,即args=([1,2,3,4,5],)
,于是你在sum = sum + i
时会出现类型不符的问题。
首先,提问问题请注意格式
当你传递 a 也就是
[1, 2, 3, 4, 5]
的时候,因为你的函数 myF4 的形参是 *args,它会把所有的参数打包成 tuple 给 args,换句话说, args 是一个 tuple,而你真正想遍历的是[1, 2, 3, 4, 5]
,它是 args 的第一个元素,所以应该是for i in args[0]