为什么我用返回函数进行for循环列表,元素type是list

玛拉的哲学
  • 6
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运行时,也无法运行。
但单独进行列表循环时又可以运行。

回复
阅读 1.1k
2 个回答
✓ 已被采纳

首先,提问问题请注意格式

当你传递 a 也就是 [1, 2, 3, 4, 5] 的时候,因为你的函数 myF4 的形参是 *args,它会把所有的参数打包成 tuple 给 args,换句话说, args 是一个 tuple,而你真正想遍历的是 [1, 2, 3, 4, 5],它是 args 的第一个元素,所以应该是 for i in args[0]

你这个函数本身是没有问题的,问题出在你传递参数的时候。

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时会出现类型不符的问题。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏