“如何解决此问题中的'函数调用问题'”

时间:2019-03-24 05:50:43

标签: python

  

类解决方案中的文件“ /home/shubham/PycharmProjects/LeetCode/AddTwoLinkedList.py”,第5行,解决方案:在解决方案addTwoNumber(l1,第35行,文件“ /home/shubham/PycharmProjects/LeetCode/AddTwoLinkedList.py”,第35行,l2)TypeError:addTwoNumber()缺少1个必需的位置参数:“ l2”

class ListNode:
    def __init__(self,x):
        self.val=x
        self.next=None
class Solution:
    def addTwoNumber(self,l1,l2):
        head=l3=ListNode(0)
        carry=0

        while l1 or l2 or carry:
            if l1:
                carry+=l1.val
                l1=l1.next
                if l2:
                    carry+=l2.val
                l2=l2.next

                l3.val=carry%10
                carry=carry//10

                if l1 or l2 or carry:
                    l3.next=ListNode(0)
                l3=l3.next
        print(head)
        return head

    l1 = ListNode(2)
    l1 = ListNode(4)
    l1 = ListNode(3)
    l2 = ListNode(5)
    l2 = ListNode(6)
    l2 = ListNode(4)
    addTwoNumber(l1, l2)

2 个答案:

答案 0 :(得分:2)

我发现您的代码存在一些问题。

首先,Python是基于空格的语言。

因此,您的代码段

l1 = ListNode(2)
l1 = ListNode(4)
l1 = ListNode(3)
l2 = ListNode(5)
l2 = ListNode(6)
l2 = ListNode(4)
addTwoNumber(l1, l2)

实际上在您的Solution类的正文中。

这需要被拉到文件的全局范围。为了简化这篇文章,我删除了您的代码正文。

class Solution:
    # put your code in here

s = Solution()
l1 = ListNode(2)
l2 = ListNode(6)
answer = s.addTwoNumber(l1, l2)

注意,我也是如何创建Solution实例的。我们需要这样做,因为addTwoNumberSolution

的实例方法

然后您使用python your_filename.py

运行该文件

您将获得TypeError: addTwoNumber() missing 1 required positional argument: 'l2',因为Python在调用实例方法时会自动提供self变量,该变量引用对象的实例。

但是,您不允许Python提供self,因为当前调用它的方式就像是静态方法一样,因此它从左到右填充了参数。也就是说,它分别通过l1l2传递“ self”和“ l1”,但是您的函数需要3个参数。

答案 1 :(得分:1)

函数addTwoNumber是成员函数,因此需要将self的值作为addTwoNumber(selfValue, l1, l2)selfValue.addTwoNumber(l1, l2)传递。

只需将selfValue替换为您想作为self参数传递的任何值即可。