python函数参数搞砸了

时间:2011-02-10 03:41:24

标签: python function parameters

所以我有

def gcd(a,b):
    if a == 0:
            return b
    while b != 0:
            if a > b:
                    a = a - b
            else:
                    b = b - a
    return a 

但是当我从控制台调用gcd(1,2)时,错误

追踪(最近一次通话):   文件“”,第1行,in     G.gcd(1,2) TypeError:gcd()只需要2个参数(给定3个)

出现......

这完全没有意义,因为我只给了2个参数......

我做错了什么?

好吧,所以我删除了其他一切,这是我班上唯一的事情:

import random
import math

class RSA:
    def gcd(a,b):
        if a == 0:
            return b
        while b != 0:
            if a > b:
                a = a - b
            else:
                b = b - a
        return a 

并且问题仍然存在

8 个答案:

答案 0 :(得分:7)

您将该函数称为方法。添加“self”作为第一个参数,它将起作用。

答案 1 :(得分:5)

您尚未发布所有代码。您未发布的代码如下所示:

class SomeClass:

    def gcd(a,b):
        if a == 0:
                return b
        while b != 0:
                if a > b:
                        a = a - b
                else:
                        b = b - a
        return a 

G = SomeClass()
G.gcd(1,2)

在python中,当您定义类成员函数时,类实例会自动传递给该函数。将代码更改为如下所示:

class SomeClass:

    def gcd(a,b):
        if a == 0:
                return b
        while b != 0:
                if a > b:
                        a = a - b
                else:
                        b = b - a
        return a 

G = SomeClass()
G.gcd(1,2)

或更好

def gcd( a,b):
    if a == 0:
            return b
    while b != 0:
            if a > b:
                    a = a - b
            else:
                    b = b - a
    return a 

gcd(1,2)

一切都会好的。

答案 2 :(得分:3)

您可以像这样使用staticmethod装饰器:

...
class RSA:    

    @staticmethod
    def gcd(a,b):
        ...

答案 3 :(得分:2)

如果gcd是类中的一个方法,那么你应该按如下方式定义它:

def gcd(self,a,b):等等。

答案 4 :(得分:1)

我怀疑(因为错误是在你没有提供的代码中)gcd实际上是一个方法,你将它称为obj.gcd(a,b)。这被翻译为gcd(self,a,b)= 3个参数。你需要用self参数定义函数。

答案 5 :(得分:1)

已经有一个已经接受的答案可以解决这个问题,但是我想指出,(恕我直言)Python中更惯用的解决方案是将类外的gcd方法移动到普通函数在模块中。

我的意思是,这是一个通用功能。 Python中没有理由将它封装在一个类中。

答案 6 :(得分:0)

我只是把代码扔进Python(在解释器模式下),它似乎工作得很好。你确定gcd没有在任何地方重新定义吗?如果我没记错的话,Python将允许你在没有警告的情况下重新定义函数。

答案 7 :(得分:0)

您提供的代码在解释器中运行良好。如果您将gcd()作为方法调用,则需要添加“self”作为第一个参数。

    def gcd(self, a, b):
        //...